On Thu, Aug 31, 2023, at 10:41, Thomas Zimmermann wrote: > Hi, > > there's a per-architecture function called fb_pgprotect() that sets > VMA's vm_page_prot for mmaped framebuffers. Most architectures use a > simple implementation based on pgprot_writecomine() [1] or > pgprot_noncached(). [2] > > On PPC this function uses phys_mem_access_prot() and therefore requires > the mmap call's file struct. [3] Removing the file argument would help > with simplifying the caller of fb_pgprotect(). [4] > > Why is the file even required on PPC? > > Is it possible to replace phys_mem_access_prot() with something simpler > that does not use the file struct? What what I can tell, the structure of the code is a result of these constraints: - some powerpc platforms use different page table flags for prefetchable vs nonprefetchable BARs on PCI memory. - page table flags must match between all mappings, in particular here between /dev/fb0 and /dev/mem, as mismatched attributes cause a checkstop. On other architectures this may cause undefined behavior instead of a checkstop It's unfortunate that we have multiple incompatible ways to determine the page flags based on firmware (ia64), pci (powerpc) or file->f_flags (arm, csky), when they all try to solve the same problem here. Christophe's suggested approach to simplify it is probably fine, another way would be to pass the f_flags value instead of the file pointer. Arnd