[PATCH v3 2/5] fbdev: Replace fb_pgprotect() with fb_pgprot_device()
Thomas Zimmermann
tzimmermann at suse.de
Mon Sep 11 14:28:11 UTC 2023
Am 11.09.23 um 16:19 schrieb Christophe Leroy:
>
> Le 11/09/2023 à 15:08, Thomas Zimmermann a écrit :
>> Rename the fbdev mmap helper fb_pgprotect() to pgprot_framebuffer().
>> The helper sets VMA page-access flags for framebuffers in device I/O
>> memory.
>>
>> Also clean up the helper's parameters and return value. Instead of
>> the VMA instance, pass the individial parameters separately: existing
>> page-access flags, the VMAs start and end addresses and the offset
>> in the underlying device memory rsp file. Return the new page-access
>> flags. These changes align pgprot_framebuffer() with other pgprot_()
>> functions.
>>
>> v3:
>> * rename fb_pgprotect() to pgprot_framebuffer() (Arnd)
>
> Then maybe the Subject: needs to be changed as well.
Arghh. Sorry.
>
>>
>> Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
>> ---
>> arch/ia64/include/asm/fb.h | 15 +++++++--------
>> arch/m68k/include/asm/fb.h | 19 ++++++++++---------
>> arch/mips/include/asm/fb.h | 11 +++++------
>> arch/powerpc/include/asm/fb.h | 13 +++++--------
>> arch/sparc/include/asm/fb.h | 15 +++++++++------
>> arch/x86/include/asm/fb.h | 10 ++++++----
>> arch/x86/video/fbdev.c | 15 ++++++++-------
>> drivers/video/fbdev/core/fb_chrdev.c | 3 ++-
>> include/asm-generic/fb.h | 12 ++++++------
>> 9 files changed, 58 insertions(+), 55 deletions(-)
>>
>> diff --git a/arch/ia64/include/asm/fb.h b/arch/ia64/include/asm/fb.h
>> index 1717b26fd423f..7fce0d5423590 100644
>> --- a/arch/ia64/include/asm/fb.h
>> +++ b/arch/ia64/include/asm/fb.h
>> @@ -8,17 +8,16 @@
>>
>> #include <asm/page.h>
>>
>> -struct file;
>> -
>> -static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma,
>> - unsigned long off)
>> +static inline pgprot_t pgprot_framebuffer(pgprot_t prot,
>> + unsigned long vm_start, unsigned long vm_end,
>> + unsigned long offset)
>> {
>> - if (efi_range_is_wc(vma->vm_start, vma->vm_end - vma->vm_start))
>> - vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
>> + if (efi_range_is_wc(vm_start, vm_end - vm_start))
>> + return pgprot_writecombine(prot);
>> else
>> - vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
>> + return pgprot_noncached(prot);
>> }
>> -#define fb_pgprotect fb_pgprotect
>> +#define pgprot_framebuffer pgprot_framebuffer
>>
>> static inline void fb_memcpy_fromio(void *to, const volatile void __iomem *from, size_t n)
>> {
>> diff --git a/arch/m68k/include/asm/fb.h b/arch/m68k/include/asm/fb.h
>> index 24273fc7ad917..9941b7434b696 100644
>> --- a/arch/m68k/include/asm/fb.h
>> +++ b/arch/m68k/include/asm/fb.h
>> @@ -5,26 +5,27 @@
>> #include <asm/page.h>
>> #include <asm/setup.h>
>>
>> -struct file;
>> -
>> -static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma,
>> - unsigned long off)
>> +static inline pgprot_t pgprot_framebuffer(pgprot_t prot,
>> + unsigned long vm_start, unsigned long vm_end,
>> + unsigned long offset)
>> {
>> #ifdef CONFIG_MMU
>> #ifdef CONFIG_SUN3
>> - pgprot_val(vma->vm_page_prot) |= SUN3_PAGE_NOCACHE;
>> + pgprot_val(prot) |= SUN3_PAGE_NOCACHE;
>> #else
>> if (CPU_IS_020_OR_030)
>> - pgprot_val(vma->vm_page_prot) |= _PAGE_NOCACHE030;
>> + pgprot_val(prot) |= _PAGE_NOCACHE030;
>> if (CPU_IS_040_OR_060) {
>> - pgprot_val(vma->vm_page_prot) &= _CACHEMASK040;
>> + pgprot_val(prot) &= _CACHEMASK040;
>> /* Use no-cache mode, serialized */
>> - pgprot_val(vma->vm_page_prot) |= _PAGE_NOCACHE_S;
>> + pgprot_val(prot) |= _PAGE_NOCACHE_S;
>> }
>> #endif /* CONFIG_SUN3 */
>> #endif /* CONFIG_MMU */
>> +
>> + return prot;
>> }
>> -#define fb_pgprotect fb_pgprotect
>> +#define pgprot_framebuffer pgprot_framebuffer
>>
>> #include <asm-generic/fb.h>
>>
>> diff --git a/arch/mips/include/asm/fb.h b/arch/mips/include/asm/fb.h
>> index 18b7226403bad..d98d6681d64ec 100644
>> --- a/arch/mips/include/asm/fb.h
>> +++ b/arch/mips/include/asm/fb.h
>> @@ -3,14 +3,13 @@
>>
>> #include <asm/page.h>
>>
>> -struct file;
>> -
>> -static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma,
>> - unsigned long off)
>> +static inline pgprot_t pgprot_framebuffer(pgprot_t prot,
>> + unsigned long vm_start, unsigned long vm_end,
>> + unsigned long offset)
>> {
>> - vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
>> + return pgprot_noncached(prot);
>> }
>> -#define fb_pgprotect fb_pgprotect
>> +#define pgprot_framebuffer pgprot_framebuffer
>>
>> /*
>> * MIPS doesn't define __raw_ I/O macros, so the helpers
>> diff --git a/arch/powerpc/include/asm/fb.h b/arch/powerpc/include/asm/fb.h
>> index 61e3b8806db69..3cecf14d51de8 100644
>> --- a/arch/powerpc/include/asm/fb.h
>> +++ b/arch/powerpc/include/asm/fb.h
>> @@ -2,23 +2,20 @@
>> #ifndef _ASM_FB_H_
>> #define _ASM_FB_H_
>>
>> -#include <linux/fs.h>
>> -
>> #include <asm/page.h>
>>
>> -static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma,
>> - unsigned long off)
>> +static inline pgprot_t pgprot_framebuffer(pgprot_t prot,
>> + unsigned long vm_start, unsigned long vm_end,
>> + unsigned long offset)
>> {
>> /*
>> * PowerPC's implementation of phys_mem_access_prot() does
>> * not use the file argument. Set it to NULL in preparation
>> * of later updates to the interface.
>> */
>> - vma->vm_page_prot = phys_mem_access_prot(NULL, PHYS_PFN(off),
>> - vma->vm_end - vma->vm_start,
>> - vma->vm_page_prot);
>> + return phys_mem_access_prot(NULL, PHYS_PFN(offset), vm_end - vm_start, prot);
>> }
>> -#define fb_pgprotect fb_pgprotect
>> +#define pgprot_framebuffer pgprot_framebuffer
>>
>> #include <asm-generic/fb.h>
>>
>> diff --git a/arch/sparc/include/asm/fb.h b/arch/sparc/include/asm/fb.h
>> index 572ecd3e1cc48..24440c0fda490 100644
>> --- a/arch/sparc/include/asm/fb.h
>> +++ b/arch/sparc/include/asm/fb.h
>> @@ -4,15 +4,18 @@
>>
>> #include <linux/io.h>
>>
>> +#include <asm/page.h>
>> +
>> struct fb_info;
>> -struct file;
>> -struct vm_area_struct;
>>
>> #ifdef CONFIG_SPARC32
>> -static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma,
>> - unsigned long off)
>> -{ }
>> -#define fb_pgprotect fb_pgprotect
>> +static inline pgprot_t pgprot_framebuffer(pgprot_t prot,
>> + unsigned long vm_start, unsigned long vm_end,
>> + unsigned long offset)
>> +{
>> + return prot;
>> +}
>> +#define pgprot_framebuffer pgprot_framebuffer
>> #endif
>>
>> int fb_is_primary_device(struct fb_info *info);
>> diff --git a/arch/x86/include/asm/fb.h b/arch/x86/include/asm/fb.h
>> index 23873da8fb77c..c3b9582de7efd 100644
>> --- a/arch/x86/include/asm/fb.h
>> +++ b/arch/x86/include/asm/fb.h
>> @@ -2,12 +2,14 @@
>> #ifndef _ASM_X86_FB_H
>> #define _ASM_X86_FB_H
>>
>> +#include <asm/page.h>
>> +
>> struct fb_info;
>> -struct file;
>> -struct vm_area_struct;
>>
>> -void fb_pgprotect(struct file *file, struct vm_area_struct *vma, unsigned long off);
>> -#define fb_pgprotect fb_pgprotect
>> +pgprot_t pgprot_framebuffer(pgprot_t prot,
>> + unsigned long vm_start, unsigned long vm_end,
>> + unsigned long offset);
>> +#define pgprot_framebuffer pgprot_framebuffer
>>
>> int fb_is_primary_device(struct fb_info *info);
>> #define fb_is_primary_device fb_is_primary_device
>> diff --git a/arch/x86/video/fbdev.c b/arch/x86/video/fbdev.c
>> index 49a0452402e97..1dd6528cc947c 100644
>> --- a/arch/x86/video/fbdev.c
>> +++ b/arch/x86/video/fbdev.c
>> @@ -13,16 +13,17 @@
>> #include <linux/vgaarb.h>
>> #include <asm/fb.h>
>>
>> -void fb_pgprotect(struct file *file, struct vm_area_struct *vma, unsigned long off)
>> +pgprot_t pgprot_framebuffer(pgprot_t prot,
>> + unsigned long vm_start, unsigned long vm_end,
>> + unsigned long offset)
>> {
>> - unsigned long prot;
>> -
>> - prot = pgprot_val(vma->vm_page_prot) & ~_PAGE_CACHE_MASK;
>> + pgprot_val(prot) &= ~_PAGE_CACHE_MASK;
>> if (boot_cpu_data.x86 > 3)
>> - pgprot_val(vma->vm_page_prot) =
>> - prot | cachemode2protval(_PAGE_CACHE_MODE_UC_MINUS);
>> + pgprot_val(prot) |= cachemode2protval(_PAGE_CACHE_MODE_UC_MINUS);
>> +
>> + return prot;
>> }
>> -EXPORT_SYMBOL(fb_pgprotect);
>> +EXPORT_SYMBOL(pgprot_framebuffer);
>>
>> int fb_is_primary_device(struct fb_info *info)
>> {
>> diff --git a/drivers/video/fbdev/core/fb_chrdev.c b/drivers/video/fbdev/core/fb_chrdev.c
>> index eadb81f53a821..32a7315b4b6dd 100644
>> --- a/drivers/video/fbdev/core/fb_chrdev.c
>> +++ b/drivers/video/fbdev/core/fb_chrdev.c
>> @@ -365,7 +365,8 @@ static int fb_mmap(struct file *file, struct vm_area_struct *vma)
>> mutex_unlock(&info->mm_lock);
>>
>> vma->vm_page_prot = vm_get_page_prot(vma->vm_flags);
>> - fb_pgprotect(file, vma, start);
>> + vma->vm_page_prot = pgprot_framebuffer(vma->vm_page_prot, vma->vm_start,
>> + vma->vm_end, start);
>>
>> return vm_iomap_memory(vma, start, len);
>> }
>> diff --git a/include/asm-generic/fb.h b/include/asm-generic/fb.h
>> index bb7ee9c70e603..6ccabb400aa66 100644
>> --- a/include/asm-generic/fb.h
>> +++ b/include/asm-generic/fb.h
>> @@ -12,14 +12,14 @@
>> #include <linux/pgtable.h>
>>
>> struct fb_info;
>> -struct file;
>>
>> -#ifndef fb_pgprotect
>> -#define fb_pgprotect fb_pgprotect
>> -static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma,
>> - unsigned long off)
>> +#ifndef pgprot_framebuffer
>> +#define pgprot_framebuffer pgprot_framebuffer
>> +static inline pgprot_t pgprot_framebuffer(pgprot_t prot,
>> + unsigned long vm_start, unsigned long vm_end,
>> + unsigned long offset)
>> {
>> - vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
>> + return pgprot_writecombine(prot);
>> }
>> #endif
>>
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature.asc
Type: application/pgp-signature
Size: 840 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20230911/237fc7c7/attachment-0001.sig>
More information about the dri-devel
mailing list