Re: [PATCH v3 2/5] fbdev: Replace fb_pgprotect() with fb_pgprot_device()

Thomas Zimmermann <[email protected]>
Newsgroups gmane.linux.ports.ppc.embedded,gmane.linux.kernel.cross-arch,gmane.linux.ports.ia64,gmane.linux.ports.mips,gmane.comp.video.dri.devel,gmane.linux.ports.sparc
Message-ID <[email protected]>

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 <[email protected]>
>> ---
>>    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)
OpenPGP_signature.asc (application/pgp-signature, 840 B)
-----BEGIN PGP SIGNATURE-----

wsF5BAABCAAjFiEExndm/fpuMUdwYFFolh/E3EQov+AFAmT/I/wFAwAAAAAACgkQlh/E3EQov+BR
SRAAq3j0MvyhnUmkK3lfV/GwwArCbyeicavxeCyXdX11lan6NYtX09mwPnZEaCnoHe0vSkXtZTdZ
o/0yJqCPaTepKAOiqXHs8g0881y6Y11Ns6EFAwjfhwdD1igICbyQr51+GvnJSFu5nTCAnxO3CoSX
uzbZ6XUMlSnOt9liRhneRB5W0LFwFcoFjginvyQIC5PJ9+RCMgP2FhhoX6xecr9JLpbFf0ZVFLh1
Di7IFdYACw7CIzUKiqhl42lS1P/S860VNKu66NtT7wkqJ2vkZAs3lWxm4jV6Z+BcsdQiMOvnndwY
4ajTIZXQKdbgYAq6jfr98OGbPaKYgLLXj2z2V8iXq/y3m9yEsVmb9PmtpO0y5eWkq7EkK2DjrwM+
yI5GwJ7vmZAkNFlYgRHOlkVRknrmjn0snMIMwEv4f3vS3m22VS0NMnCeGUuIw/I1bKj/QoI3gg4m
r7GR621Q225Bxm3hp2+SYooiiWqwvJ8vv3g3fpQtf9ge9DHtk4XR1wREk7V7vW7h4+63A0Z0PRl5
cES/gcgxarPegK96Hxovzm9flF/p9MgZo0VKXK+K/okv8Q2dReZJiVLh8nnnSZnmBnT+MytHMd3z
ni/iNisi8p9ocWwiXEvruFzbkjkUryzKLCxvLMwsDhZjYJoS0rwodWB7PHuhgLvxKyeumYUm6zRI
3MM=
=+lXo
-----END PGP SIGNATURE-----
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.