• Alexandre Ghiti's avatar
    riscv: Move kernel mapping outside of linear mapping · 2bfc6cd8
    Alexandre Ghiti authored
    This is a preparatory patch for relocatable kernel and sv48 support.
    
    The kernel used to be linked at PAGE_OFFSET address therefore we could use
    the linear mapping for the kernel mapping. But the relocated kernel base
    address will be different from PAGE_OFFSET and since in the linear mapping,
    two different virtual addresses cannot point to the same physical address,
    the kernel mapping needs to lie outside the linear mapping so that we don't
    have to copy it at the same physical offset.
    
    The kernel mapping is moved to the last 2GB of the address space, BPF
    is now always after the kernel and modules use the 2GB memory range right
    before the kernel, so BPF and modules regions do not overlap. KASLR
    implementation will simply have to move the kernel in the last 2GB range
    and just take care of leaving enough space for BPF.
    
    In addition, by moving the kernel to the end of the address space, both
    sv39 and sv48 kernels will be exactly the same without needing to be
    relocated at runtime.
    Suggested-by: default avatarArnd Bergmann <arnd@arndb.de>
    Signed-off-by: default avatarAlexandre Ghiti <alex@ghiti.fr>
    [Palmer: Squash the STRICT_RWX fix, and a !MMU fix]
    Signed-off-by: default avatarPalmer Dabbelt <palmerdabbelt@google.com>
    2bfc6cd8
set_memory.h 1.49 KB