• Ard Biesheuvel's avatar
    arm64: mm: set the contiguous bit for kernel mappings where appropriate · d27cfa1f
    Ard Biesheuvel authored
    This is the third attempt at enabling the use of contiguous hints for
    kernel mappings. The most recent attempt 0bfc445d was reverted after
    it turned out that updating permission attributes on live contiguous ranges
    may result in TLB conflicts. So this time, the contiguous hint is not set
    for .rodata or for the linear alias of .text/.rodata, both of which are
    mapped read-write initially, and remapped read-only at a later stage.
    (Note that the latter region could also be unmapped and remapped again
    with updated permission attributes, given that the region, while live, is
    only mapped for the convenience of the hibernation code, but that also
    means the TLB footprint is negligible anyway, so why bother)
    
    This enables the following contiguous range sizes for the virtual mapping
    of the kernel image, and for the linear mapping:
    
              granule size |  cont PTE  |  cont PMD  |
              -------------+------------+------------+
                   4 KB    |    64 KB   |   32 MB    |
                  16 KB    |     2 MB   |    1 GB*   |
                  64 KB    |     2 MB   |   16 GB*   |
    
    * Only when built for 3 or more levels of translation. This is due to the
      fact that a 2 level configuration only consists of PGDs and PTEs, and the
      added complexity of dealing with folded PMDs is not justified considering
      that 16 GB contiguous ranges are likely to be ignored by the hardware (and
      16k/2 levels is a niche configuration)
    Reviewed-by: default avatarMark Rutland <mark.rutland@arm.com>
    Tested-by: default avatarMark Rutland <mark.rutland@arm.com>
    Signed-off-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
    Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    d27cfa1f
pgtable.h 21.7 KB