* [PATCH v3 1/5] fbdev: Avoid file argument in fb_pgprotect()
2023-09-11 13:08 [PATCH v3 0/5] ppc, fbdev: Clean up fbdev mmap helper Thomas Zimmermann
@ 2023-09-11 13:08 ` Thomas Zimmermann
2023-09-11 13:08 ` [PATCH v3 2/5] fbdev: Replace fb_pgprotect() with fb_pgprot_device() Thomas Zimmermann
` (3 subsequent siblings)
4 siblings, 0 replies; 8+ messages in thread
From: Thomas Zimmermann @ 2023-09-11 13:08 UTC (permalink / raw)
To: mpe, npiggin, christophe.leroy, arnd, deller
Cc: linux-arch, linux-fbdev, linux-ia64, linux-mips, dri-devel,
linux-m68k, Thomas Zimmermann, sparclinux, linuxppc-dev
Only PowerPC's fb_pgprotect() needs the file argument, although
the implementation does not use it. Pass NULL to the internal
helper in preparation of further updates. A later patch will remove
the file parameter from fb_pgprotect().
While at it, replace the shift operation with PHYS_PFN().
Suggested-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
arch/powerpc/include/asm/fb.h | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/arch/powerpc/include/asm/fb.h b/arch/powerpc/include/asm/fb.h
index 5f1a2e5f76548..61e3b8806db69 100644
--- a/arch/powerpc/include/asm/fb.h
+++ b/arch/powerpc/include/asm/fb.h
@@ -9,7 +9,12 @@
static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma,
unsigned long off)
{
- vma->vm_page_prot = phys_mem_access_prot(file, off >> PAGE_SHIFT,
+ /*
+ * 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);
}
--
2.42.0
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH v3 2/5] fbdev: Replace fb_pgprotect() with fb_pgprot_device()
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 ` Thomas Zimmermann
2023-09-11 14:19 ` Christophe Leroy
2023-09-11 13:08 ` [PATCH v3 3/5] arch/powerpc: Remove trailing whitespaces Thomas Zimmermann
` (2 subsequent siblings)
4 siblings, 1 reply; 8+ messages in thread
From: Thomas Zimmermann @ 2023-09-11 13:08 UTC (permalink / raw)
To: mpe, npiggin, christophe.leroy, arnd, deller
Cc: linux-arch, linux-fbdev, linux-ia64, linux-mips, dri-devel,
linux-m68k, Thomas Zimmermann, sparclinux, linuxppc-dev
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)
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
--
2.42.0
^ permalink raw reply related [flat|nested] 8+ messages in thread* Re: [PATCH v3 2/5] fbdev: Replace fb_pgprotect() with fb_pgprot_device()
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
2023-09-11 14:28 ` Thomas Zimmermann
0 siblings, 1 reply; 8+ messages in thread
From: Christophe Leroy @ 2023-09-11 14:19 UTC (permalink / raw)
To: Thomas Zimmermann, mpe@ellerman.id.au, npiggin@gmail.com,
arnd@arndb.de, deller@gmx.de
Cc: linux-arch@vger.kernel.org, linux-fbdev@vger.kernel.org,
linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org,
dri-devel@lists.freedesktop.org, linux-m68k@lists.linux-m68k.org,
sparclinux@vger.kernel.org, linuxppc-dev@lists.ozlabs.org
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
>
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [PATCH v3 2/5] fbdev: Replace fb_pgprotect() with fb_pgprot_device()
2023-09-11 14:19 ` Christophe Leroy
@ 2023-09-11 14:28 ` Thomas Zimmermann
0 siblings, 0 replies; 8+ messages in thread
From: Thomas Zimmermann @ 2023-09-11 14:28 UTC (permalink / raw)
To: Christophe Leroy, mpe@ellerman.id.au, npiggin@gmail.com,
arnd@arndb.de, deller@gmx.de
Cc: linux-arch@vger.kernel.org, linux-fbdev@vger.kernel.org,
linux-ia64@vger.kernel.org, linux-mips@vger.kernel.org,
dri-devel@lists.freedesktop.org, linux-m68k@lists.linux-m68k.org,
sparclinux@vger.kernel.org, linuxppc-dev@lists.ozlabs.org
[-- Attachment #1.1: Type: text/plain, Size: 10561 bytes --]
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@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)
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 840 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v3 3/5] arch/powerpc: Remove trailing whitespaces
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 13:08 ` 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
4 siblings, 0 replies; 8+ messages in thread
From: Thomas Zimmermann @ 2023-09-11 13:08 UTC (permalink / raw)
To: mpe, npiggin, christophe.leroy, arnd, deller
Cc: linux-arch, linux-fbdev, linux-ia64, linux-mips, dri-devel,
linux-m68k, Thomas Zimmermann, sparclinux, linuxppc-dev
Fix coding style. No functional changes.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
arch/powerpc/include/asm/machdep.h | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/arch/powerpc/include/asm/machdep.h b/arch/powerpc/include/asm/machdep.h
index 4f6e7d7ee3883..933465ed4c432 100644
--- a/arch/powerpc/include/asm/machdep.h
+++ b/arch/powerpc/include/asm/machdep.h
@@ -10,7 +10,7 @@
#include <linux/export.h>
struct pt_regs;
-struct pci_bus;
+struct pci_bus;
struct device_node;
struct iommu_table;
struct rtc_time;
@@ -78,8 +78,8 @@ struct machdep_calls {
unsigned char (*nvram_read_val)(int addr);
void (*nvram_write_val)(int addr, unsigned char val);
ssize_t (*nvram_write)(char *buf, size_t count, loff_t *index);
- ssize_t (*nvram_read)(char *buf, size_t count, loff_t *index);
- ssize_t (*nvram_size)(void);
+ ssize_t (*nvram_read)(char *buf, size_t count, loff_t *index);
+ ssize_t (*nvram_size)(void);
void (*nvram_sync)(void);
/* Exception handlers */
@@ -102,9 +102,9 @@ struct machdep_calls {
*/
long (*feature_call)(unsigned int feature, ...);
- /* Get legacy PCI/IDE interrupt mapping */
+ /* Get legacy PCI/IDE interrupt mapping */
int (*pci_get_legacy_ide_irq)(struct pci_dev *dev, int channel);
-
+
/* Get access protection for /dev/mem */
pgprot_t (*phys_mem_access_prot)(struct file *file,
unsigned long pfn,
--
2.42.0
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH v3 4/5] arch/powerpc: Remove file parameter from phys_mem_access_prot code
2023-09-11 13:08 [PATCH v3 0/5] ppc, fbdev: Clean up fbdev mmap helper Thomas Zimmermann
` (2 preceding siblings ...)
2023-09-11 13:08 ` [PATCH v3 3/5] arch/powerpc: Remove trailing whitespaces Thomas Zimmermann
@ 2023-09-11 13:08 ` Thomas Zimmermann
2023-09-11 13:08 ` [PATCH v3 5/5] arch/powerpc: Call internal __phys_mem_access_prot() in fbdev code Thomas Zimmermann
4 siblings, 0 replies; 8+ messages in thread
From: Thomas Zimmermann @ 2023-09-11 13:08 UTC (permalink / raw)
To: mpe, npiggin, christophe.leroy, arnd, deller
Cc: linux-arch, linux-fbdev, linux-ia64, linux-mips, dri-devel,
linux-m68k, Thomas Zimmermann, sparclinux, linuxppc-dev
Remove 'file' parameter from struct machdep_calls.phys_mem_access_prot
and its implementation in pci_phys_mem_access_prot(). The file is not
used on PowerPC. By removing it, a later patch can simplify fbdev's
mmap code, which uses phys_mem_access_prot() on PowerPC.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
arch/powerpc/include/asm/book3s/pgtable.h | 10 ++++++++--
arch/powerpc/include/asm/machdep.h | 3 +--
arch/powerpc/include/asm/nohash/pgtable.h | 10 ++++++++--
arch/powerpc/include/asm/pci.h | 4 +---
arch/powerpc/kernel/pci-common.c | 3 +--
arch/powerpc/mm/mem.c | 8 ++++----
6 files changed, 23 insertions(+), 15 deletions(-)
diff --git a/arch/powerpc/include/asm/book3s/pgtable.h b/arch/powerpc/include/asm/book3s/pgtable.h
index d18b748ea3ae0..84e36a5726417 100644
--- a/arch/powerpc/include/asm/book3s/pgtable.h
+++ b/arch/powerpc/include/asm/book3s/pgtable.h
@@ -20,9 +20,15 @@ extern void set_pte_at(struct mm_struct *mm, unsigned long addr, pte_t *ptep,
extern int ptep_set_access_flags(struct vm_area_struct *vma, unsigned long address,
pte_t *ptep, pte_t entry, int dirty);
+extern pgprot_t __phys_mem_access_prot(unsigned long pfn, unsigned long size,
+ pgprot_t vma_prot);
+
struct file;
-extern pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn,
- unsigned long size, pgprot_t vma_prot);
+static inline pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn,
+ unsigned long size, pgprot_t vma_prot)
+{
+ return __phys_mem_access_prot(pfn, size, vma_prot);
+}
#define __HAVE_PHYS_MEM_ACCESS_PROT
void __update_mmu_cache(struct vm_area_struct *vma, unsigned long address, pte_t *ptep);
diff --git a/arch/powerpc/include/asm/machdep.h b/arch/powerpc/include/asm/machdep.h
index 933465ed4c432..d31a5ec1550d4 100644
--- a/arch/powerpc/include/asm/machdep.h
+++ b/arch/powerpc/include/asm/machdep.h
@@ -106,8 +106,7 @@ struct machdep_calls {
int (*pci_get_legacy_ide_irq)(struct pci_dev *dev, int channel);
/* Get access protection for /dev/mem */
- pgprot_t (*phys_mem_access_prot)(struct file *file,
- unsigned long pfn,
+ pgprot_t (*phys_mem_access_prot)(unsigned long pfn,
unsigned long size,
pgprot_t vma_prot);
diff --git a/arch/powerpc/include/asm/nohash/pgtable.h b/arch/powerpc/include/asm/nohash/pgtable.h
index a6caaaab6f922..90366b0b3ad9a 100644
--- a/arch/powerpc/include/asm/nohash/pgtable.h
+++ b/arch/powerpc/include/asm/nohash/pgtable.h
@@ -246,9 +246,15 @@ extern int ptep_set_access_flags(struct vm_area_struct *vma, unsigned long addre
#define pgprot_writecombine pgprot_noncached_wc
+extern pgprot_t __phys_mem_access_prot(unsigned long pfn, unsigned long size,
+ pgprot_t vma_prot);
+
struct file;
-extern pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn,
- unsigned long size, pgprot_t vma_prot);
+static inline pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn,
+ unsigned long size, pgprot_t vma_prot)
+{
+ return __phys_mem_access_prot(pfn, size, vma_prot);
+}
#define __HAVE_PHYS_MEM_ACCESS_PROT
#ifdef CONFIG_HUGETLB_PAGE
diff --git a/arch/powerpc/include/asm/pci.h b/arch/powerpc/include/asm/pci.h
index 289f1ec85bc54..34ed4d51c546b 100644
--- a/arch/powerpc/include/asm/pci.h
+++ b/arch/powerpc/include/asm/pci.h
@@ -104,9 +104,7 @@ extern void of_scan_pci_bridge(struct pci_dev *dev);
extern void of_scan_bus(struct device_node *node, struct pci_bus *bus);
extern void of_rescan_bus(struct device_node *node, struct pci_bus *bus);
-struct file;
-extern pgprot_t pci_phys_mem_access_prot(struct file *file,
- unsigned long pfn,
+extern pgprot_t pci_phys_mem_access_prot(unsigned long pfn,
unsigned long size,
pgprot_t prot);
diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c
index e88d7c9feeec3..73f12a17e572e 100644
--- a/arch/powerpc/kernel/pci-common.c
+++ b/arch/powerpc/kernel/pci-common.c
@@ -521,8 +521,7 @@ int pci_iobar_pfn(struct pci_dev *pdev, int bar, struct vm_area_struct *vma)
* PCI device, it tries to find the PCI device first and calls the
* above routine
*/
-pgprot_t pci_phys_mem_access_prot(struct file *file,
- unsigned long pfn,
+pgprot_t pci_phys_mem_access_prot(unsigned long pfn,
unsigned long size,
pgprot_t prot)
{
diff --git a/arch/powerpc/mm/mem.c b/arch/powerpc/mm/mem.c
index 8b121df7b08f8..03aadf657d15a 100644
--- a/arch/powerpc/mm/mem.c
+++ b/arch/powerpc/mm/mem.c
@@ -34,18 +34,18 @@ unsigned long long memory_limit;
unsigned long empty_zero_page[PAGE_SIZE / sizeof(unsigned long)] __page_aligned_bss;
EXPORT_SYMBOL(empty_zero_page);
-pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn,
- unsigned long size, pgprot_t vma_prot)
+pgprot_t __phys_mem_access_prot(unsigned long pfn, unsigned long size,
+ pgprot_t vma_prot)
{
if (ppc_md.phys_mem_access_prot)
- return ppc_md.phys_mem_access_prot(file, pfn, size, vma_prot);
+ return ppc_md.phys_mem_access_prot(pfn, size, vma_prot);
if (!page_is_ram(pfn))
vma_prot = pgprot_noncached(vma_prot);
return vma_prot;
}
-EXPORT_SYMBOL(phys_mem_access_prot);
+EXPORT_SYMBOL(__phys_mem_access_prot);
#ifdef CONFIG_MEMORY_HOTPLUG
static DEFINE_MUTEX(linear_mapping_mutex);
--
2.42.0
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH v3 5/5] arch/powerpc: Call internal __phys_mem_access_prot() in fbdev code
2023-09-11 13:08 [PATCH v3 0/5] ppc, fbdev: Clean up fbdev mmap helper Thomas Zimmermann
` (3 preceding siblings ...)
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 ` Thomas Zimmermann
4 siblings, 0 replies; 8+ messages in thread
From: Thomas Zimmermann @ 2023-09-11 13:08 UTC (permalink / raw)
To: mpe, npiggin, christophe.leroy, arnd, deller
Cc: linux-arch, linux-fbdev, linux-ia64, linux-mips, dri-devel,
linux-m68k, Thomas Zimmermann, sparclinux, linuxppc-dev
Call __phys_mem_access_prot() from the fbdev mmap helper
pgprot_framebuffer(). Allows to avoid the file argument of NULL.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
arch/powerpc/include/asm/fb.h | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/arch/powerpc/include/asm/fb.h b/arch/powerpc/include/asm/fb.h
index 3cecf14d51de8..c0c5d1df7ad1e 100644
--- a/arch/powerpc/include/asm/fb.h
+++ b/arch/powerpc/include/asm/fb.h
@@ -8,12 +8,7 @@ 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.
- */
- return phys_mem_access_prot(NULL, PHYS_PFN(offset), vm_end - vm_start, prot);
+ return __phys_mem_access_prot(PHYS_PFN(offset), vm_end - vm_start, prot);
}
#define pgprot_framebuffer pgprot_framebuffer
--
2.42.0
^ permalink raw reply related [flat|nested] 8+ messages in thread