• Ard Biesheuvel's avatar
    arm64: mm: extend linear region for 52-bit VA configurations · f4693c27
    Ard Biesheuvel authored
    For historical reasons, the arm64 kernel VA space is configured as two
    equally sized halves, i.e., on a 48-bit VA build, the VA space is split
    into a 47-bit vmalloc region and a 47-bit linear region.
    
    When support for 52-bit virtual addressing was added, this equal split
    was kept, resulting in a substantial waste of virtual address space in
    the linear region:
    
                               48-bit VA                     52-bit VA
      0xffff_ffff_ffff_ffff +-------------+               +-------------+
                            |   vmalloc   |               |   vmalloc   |
      0xffff_8000_0000_0000 +-------------+ _PAGE_END(48) +-------------+
                            |   linear    |               :             :
      0xffff_0000_0000_0000 +-------------+               :             :
                            :             :               :             :
                            :             :               :             :
                            :             :               :             :
                            :             :               :  currently  :
                            :  unusable   :               :             :
                            :             :               :   unused    :
                            :     by      :               :             :
                            :             :               :             :
                            :  hardware   :               :             :
                            :             :               :             :
      0xfff8_0000_0000_0000 :             : _PAGE_END(52) +-------------+
                            :             :               |             |
                            :             :               |             |
                            :             :               |             |
                            :             :               |             |
                            :             :               |             |
                            :  unusable   :               |             |
                            :             :               |   linear    |
                            :     by      :               |             |
                            :             :               |   region    |
                            :  hardware   :               |             |
                            :             :               |             |
                            :             :               |             |
                            :             :               |             |
                            :             :               |             |
                            :             :               |             |
                            :             :               |             |
      0xfff0_0000_0000_0000 +-------------+  PAGE_OFFSET  +-------------+
    
    As illustrated above, the 52-bit VA kernel uses 47 bits for the vmalloc
    space (as before), to ensure that a single 64k granule kernel image can
    support any 64k granule capable system, regardless of whether it supports
    the 52-bit virtual addressing extension. However, due to the fact that
    the VA space is still split in equal halves, the linear region is only
    2^51 bytes in size, wasting almost half of the 52-bit VA space.
    
    Let's fix this, by abandoning the equal split, and simply assigning all
    VA space outside of the vmalloc region to the linear region.
    
    The KASAN shadow region is reconfigured so that it ends at the start of
    the vmalloc region, and grows downwards. That way, the arrangement of
    the vmalloc space (which contains kernel mappings, modules, BPF region,
    the vmemmap array etc) is identical between non-KASAN and KASAN builds,
    which aids debugging.
    Signed-off-by: default avatarArd Biesheuvel <ardb@kernel.org>
    Reviewed-by: default avatarSteve Capper <steve.capper@arm.com>
    Link: https://lore.kernel.org/r/20201008153602.9467-3-ardb@kernel.orgSigned-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    f4693c27
memory.rst 7.68 KB