• Nicolas Pitre's avatar
    cramfs: add mmap support · eddcd976
    Nicolas Pitre authored
    When cramfs in physical memory 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.
    
    For a file to be mmap()-able, the map area has to correspond to a range
    of uncompressed and contiguous blocks, and in the MMU case it also has
    to be page aligned. A version of mkcramfs with appropriate support is
    necessary to create such a filesystem image.
    
    In the MMU case it may happen for a vma structure to extend beyond the
    actual file size. This is notably the case in binfmt_elf.c:elf_map().
    Or the file's last block is shared with other files and cannot be mapped
    as is. Rather than refusing to mmap it, we do a "mixed" map and let the
    regular fault handler populate the unmapped area with RAM-backed pages.
    In practice the unmapped area is seldom accessed so page faults might
    never occur before this area is discarded.
    
    In the non-MMU case it is the get_unmapped_area method that is responsible
    for providing the address where the actual data can be found. No mapping
    is necessary of course.
    Signed-off-by: default avatarNicolas Pitre <nico@linaro.org>
    Tested-by: default avatarChris Brandt <chris.brandt@renesas.com>
    Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
    eddcd976
inode.c 26 KB