On Wednesday, October 04, 2017, Nicolas Pitre wrote: > On Wed, 4 Oct 2017, Christoph Hellwig wrote: > > > As said in my last mail: look at the VM_MIXEDMAP flag and how it is > > used by DAX, and you'll get out of the vma splitting business in the > > fault path. > > Alright, it appears to work. > > The only downside so far is the lack of visibility from user space to > confirm it actually works as intended. With the vma splitting approach > you clearly see what gets directly mapped in /proc/*/maps thanks to > remap_pfn_range() storing the actual physical address in vma->vm_pgoff. > With VM_MIXEDMAP things are no longer visible. Any opinion for the best > way to overcome this? > > Anyway, here's a replacement for patch 4/5 below: > > ----- >8 > Subject: cramfs: add mmap support > > When cramfs_physmem is used then we have the opportunity to map files > directly from ROM, directly into user space, saving on RAM usage. > This gives us Execute-In-Place (XIP) support. Tested on my setup: * Cortex A9 (with MMU) * CONFIG_XIP_KERNEL=y * booted with XIP CRAMFS as my rootfs * all apps and libraries marked as XIP in my cramfs image So far, functionally it seems to work the same as [PATCH v4 4/5]. As Nicolas said, before you could easily see that all my apps and libraries were XIP from Flash: $ cat /proc/self/maps 00008000-000a1000 r-xp 1b005000 00:0c 18192 /bin/busybox 000a9000-000aa000 rw-p 00099000 00:0c 18192 /bin/busybox 000aa000-000ac000 rw-p 00000000 00:00 0 [heap] b6e69000-b6f42000 r-xp 1b0bc000 00:0c 766540 /lib/libc-2.18-2013.10.so b6f42000-b6f4a000 ---p 1b195000 00:0c 766540 /lib/libc-2.18-2013.10.so b6f4a000-b6f4c000 r--p 000d9000 00:0c 766540 /lib/libc-2.18-2013.10.so b6f4c000-b6f4d000 rw-p 000db000 00:0c 766540 /lib/libc-2.18-2013.10.so b6f4d000-b6f50000 rw-p 00000000 00:00 0 b6f50000-b6f67000 r-xp 1b0a4000 00:0c 670372 /lib/ld-2.18-2013.10.so b6f6a000-b6f6b000 rw-p 00000000 00:00 0 b6f6c000-b6f6e000 rw-p 00000000 00:00 0 b6f6e000-b6f6f000 r--p 00016000 00:0c 670372 /lib/ld-2.18-2013.10.so b6f6f000-b6f70000 rw-p 00017000 00:0c 670372 /lib/ld-2.18-2013.10.so beac0000-beae1000 rw-p 00000000 00:00 0 [stack] bebc9000-bebca000 r-xp 00000000 00:00 0 [sigpage] ffff0000-ffff1000 r-xp 00000000 00:00 0 [vectors] But now just busybox looks like it's XIP: $ cat /proc/self/maps 00008000-000a1000 r-xp 1b005000 00:0c 18192 /bin/busybox 000a9000-000aa000 rw-p 00099000 00:0c 18192 /bin/busybox 000aa000-000ac000 rw-p 00000000 00:00 0 [heap] b6e4d000-b6f26000 r-xp 00000000 00:0c 766540 /lib/libc-2.18-2013.10.so b6f26000-b6f2e000 ---p 000d9000 00:0c 766540 /lib/libc-2.18-2013.10.so b6f2e000-b6f30000 r--p 000d9000 00:0c 766540 /lib/libc-2.18-2013.10.so b6f30000-b6f31000 rw-p 000db000 00:0c 766540 /lib/libc-2.18-2013.10.so b6f31000-b6f34000 rw-p 00000000 00:00 0 b6f34000-b6f4b000 r-xp 00000000 00:0c 670372 /lib/ld-2.18-2013.10.so b6f4e000-b6f4f000 rw-p 00000000 00:00 0 b6f50000-b6f52000 rw-p 00000000 00:00 0 b6f52000-b6f53000 r--p 00016000 00:0c 670372 /lib/ld-2.18-2013.10.so b6f53000-b6f54000 rw-p 00017000 00:0c 670372 /lib/ld-2.18-2013.10.so bec93000-becb4000 rw-p 00000000 00:00 0 [stack] befad000-befae000 r-xp 00000000 00:00 0 [sigpage] ffff0000-ffff1000 r-xp 00000000 00:00 0 [vectors] Regardless, from a functional standpoint: Tested-by: Chris Brandt <chris.brandt@xxxxxxxxxxx> Just FYI, the previous [PATCH v4 4/5] also included this (which was the only real difference between v3 and v4): diff --git a/fs/cramfs/Kconfig b/fs/cramfs/Kconfig index 5b4e0b7e13..306549be25 100644 --- a/fs/cramfs/Kconfig +++ b/fs/cramfs/Kconfig @@ -30,7 +30,7 @@ config CRAMFS_BLOCKDEV config CRAMFS_PHYSMEM bool "Support CramFs image directly mapped in physical memory" - depends on CRAMFS + depends on CRAMFS = y default y if !CRAMFS_BLOCKDEV help This option allows the CramFs driver to load data directly from Chris