From: Christophe Leroy <christophe.leroy@csgroup.eu>
To: Thomas Zimmermann <tzimmermann@suse.de>,
"mpe@ellerman.id.au" <mpe@ellerman.id.au>,
"npiggin@gmail.com" <npiggin@gmail.com>,
"arnd@arndb.de" <arnd@arndb.de>, "deller@gmx.de" <deller@gmx.de>
Cc: "linux-arch@vger.kernel.org" <linux-arch@vger.kernel.org>,
"linux-fbdev@vger.kernel.org" <linux-fbdev@vger.kernel.org>,
"linux-ia64@vger.kernel.org" <linux-ia64@vger.kernel.org>,
"linux-mips@vger.kernel.org" <linux-mips@vger.kernel.org>,
"dri-devel@lists.freedesktop.org"
<dri-devel@lists.freedesktop.org>,
"linux-m68k@lists.linux-m68k.org"
<linux-m68k@lists.linux-m68k.org>,
"sparclinux@vger.kernel.org" <sparclinux@vger.kernel.org>,
"linuxppc-dev@lists.ozlabs.org" <linuxppc-dev@lists.ozlabs.org>
Subject: Re: [PATCH v3 2/5] fbdev: Replace fb_pgprotect() with fb_pgprot_device()
Date: Mon, 11 Sep 2023 14:19:56 +0000 [thread overview]
Message-ID: <1fac068f-f13c-71f4-c9bb-bb331d2d1c04@csgroup.eu> (raw)
In-Reply-To: <20230911131033.27745-3-tzimmermann@suse.de>
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.
>
> Signed-off-by: Thomas Zimmermann <tzimmermann@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
>
next prev parent reply other threads:[~2023-09-11 14:21 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-11 13:08 [PATCH v3 0/5] ppc, fbdev: Clean up fbdev mmap helper Thomas Zimmermann
2023-09-11 13:08 ` [PATCH v3 1/5] fbdev: Avoid file argument in fb_pgprotect() Thomas Zimmermann
2023-09-11 13:08 ` [PATCH v3 2/5] fbdev: Replace fb_pgprotect() with fb_pgprot_device() Thomas Zimmermann
2023-09-11 14:19 ` Christophe Leroy [this message]
2023-09-11 14:28 ` Thomas Zimmermann
2023-09-11 13:08 ` [PATCH v3 3/5] arch/powerpc: Remove trailing whitespaces Thomas Zimmermann
2023-09-11 13:08 ` [PATCH v3 4/5] arch/powerpc: Remove file parameter from phys_mem_access_prot code Thomas Zimmermann
2023-09-11 13:08 ` [PATCH v3 5/5] arch/powerpc: Call internal __phys_mem_access_prot() in fbdev code Thomas Zimmermann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1fac068f-f13c-71f4-c9bb-bb331d2d1c04@csgroup.eu \
--to=christophe.leroy@csgroup.eu \
--cc=arnd@arndb.de \
--cc=deller@gmx.de \
--cc=dri-devel@lists.freedesktop.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-fbdev@vger.kernel.org \
--cc=linux-ia64@vger.kernel.org \
--cc=linux-m68k@lists.linux-m68k.org \
--cc=linux-mips@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mpe@ellerman.id.au \
--cc=npiggin@gmail.com \
--cc=sparclinux@vger.kernel.org \
--cc=tzimmermann@suse.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).