• Ard Biesheuvel's avatar
    efi/libstub: arm: omit sorting of the UEFI memory map · 29f9007b
    Ard Biesheuvel authored
    ARM shares its EFI stub implementation with arm64, which has some
    special handling in the virtual remapping code to
    a) make sure that we can map everything even if the OS executes
       with 64k page size, and
    b) make sure that adjacent regions with the same attributes are not
       reordered or moved apart in memory.
    
    The latter is a workaround for a 'feature' that was shortly recommended
    by UEFI spec v2.5, but deprecated shortly after, due to the fact that
    it broke many OS installers, including non-Linux ones, and it was never
    widely implemented for ARM systems. Before implementing b), the arm64
    code simply rounded up all regions to 64 KB granularity, but given that
    that results in moving adjacent regions apart, it had to be refined when
    b) was implemented.
    
    The adjacency check requires a sort() pass, due to the fact that the
    UEFI spec does not mandate any ordering, and the inclusion of the
    lib/sort.c code into the ARM EFI stub is causing some trouble with
    the decompressor build due to the fact that its EXPORT_SYMBOL() call
    triggers the creation of ksymtab/kcrctab sections.
    
    So let's simply do away with the adjacency check for ARM, and simply put
    all UEFI runtime regions together if they have the same memory attributes.
    This is guaranteed to work, given that ARM only supports 4 KB pages,
    and allows us to remove the sort() call entirely.
    Signed-off-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
    Acked-by: default avatarWill Deacon <will.deacon@arm.com>
    Tested-by: default avatarJeffy Chen <jeffy.chen@rock-chips.com>
    Tested-by: default avatarGregory CLEMENT <gregory.clement@free-electrons.com>
    Tested-by: default avatarMatthias Brugger <matthias.bgg@gmail.com>
    Signed-off-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
    29f9007b
arm-stub.c 12 KB