]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
fbdev: Replace fb_pgprotect() with pgprot_framebuffer()
authorThomas Zimmermann <tzimmermann@suse.de>
Fri, 22 Sep 2023 08:04:56 +0000 (10:04 +0200)
committerThomas Zimmermann <tzimmermann@suse.de>
Thu, 12 Oct 2023 07:20:46 +0000 (09:20 +0200)
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.

v4:
* fix commit message (Christophe)
v3:
* rename fb_pgprotect() to pgprot_framebuffer() (Arnd)

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: Geert Uytterhoeven <geert@linux-m68k.org> # m68k
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230922080636.26762-3-tzimmermann@suse.de
arch/ia64/include/asm/fb.h
arch/m68k/include/asm/fb.h
arch/mips/include/asm/fb.h
arch/powerpc/include/asm/fb.h
arch/sparc/include/asm/fb.h
arch/x86/include/asm/fb.h
arch/x86/video/fbdev.c
drivers/video/fbdev/core/fb_chrdev.c
include/asm-generic/fb.h

index 1717b26fd423f48da7bc1d655b1a4dd7ce100ba6..7fce0d54235904d23dc369bfeca10fe5eecc6cd1 100644 (file)
@@ -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)
 {
index 24273fc7ad9176fa86238fbd2b4ab9b638efd57e..9941b7434b6963827eaaa2cd0047e58d187b67c1 100644 (file)
@@ -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>
 
index 18b7226403bad157a0b19267a7b5815c4b4a9a6d..d98d6681d64eca8347a464dd7b5dae56afed1647 100644 (file)
@@ -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
index 61e3b8806db69da1d9efcdeb8d59e0eee0159bbe..3cecf14d51de8661a2e9af0df8244c3b37c2886c 100644 (file)
@@ -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>
 
index 572ecd3e1cc48e5cbc265629b637c578ded5a0e7..24440c0fda490a1f24907865a964721db7d6431a 100644 (file)
@@ -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);
index 23873da8fb77c4c12aaf552d4ddb7c1649255f84..c3b9582de7efd7d56799be21b89eb274343a092a 100644 (file)
@@ -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
index 49a0452402e97f6d0c325e4cf0429d59603e138f..1dd6528cc947cb224a0dcf5a78ea787fcb28b10a 100644 (file)
 #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)
 {
index eadb81f53a821c45a8ca535d251c9769402229de..32a7315b4b6dd32147414643170006bd6fc8a759 100644 (file)
@@ -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);
 }
index bb7ee9c70e60396be48abd397025b301fd423220..6ccabb400aa66fd166bad3e19e3afd739241d9b2 100644 (file)
 #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