Thread (5 messages) flat view 5 messages, 3 authors, 2023-09-04

Re: Framebuffer mmap on PowerPC

From: "Arnd Bergmann" <arnd@arndb.de>
Date: 2023-09-01 01:46:05
Also in: dri-devel, linux-arch, linux-fbdev

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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help