linux/drivers/firmware/efi
Ard Biesheuvel 29f9007b31 efi/libstub: arm: omit sorting of the UEFI memory map
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: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Acked-by: Will Deacon <will.deacon@arm.com>
Tested-by: Jeffy Chen <jeffy.chen@rock-chips.com>
Tested-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
Tested-by: Matthias Brugger <matthias.bgg@gmail.com>
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
2017-10-27 23:14:28 +01:00
..
libstub efi/libstub: arm: omit sorting of the UEFI memory map 2017-10-27 23:14:28 +01:00
test efi/efi_test: Use memdup_user() helper 2017-06-05 17:50:42 +02:00
apple-properties.c treewide: Consolidate Apple DMI checks 2017-08-03 23:26:22 +02:00
arm-init.c efi/arm/arm64: Add missing assignment of efi.config_table 2017-08-21 09:43:49 +02:00
arm-runtime.c efi/arm: Enable DMI/SMBIOS 2017-06-05 17:50:44 +02:00
capsule-loader.c efi/capsule-loader: Use page addresses rather than struct page pointers 2017-06-05 17:50:41 +02:00
capsule.c efi/capsule-loader: Use page addresses rather than struct page pointers 2017-06-05 17:50:41 +02:00
cper.c Just a single conversion to the new UUID API for this merge window. 2017-09-12 13:27:21 -07:00
dev-path-parser.c efi: Add device path parser 2016-11-13 08:23:15 +01:00
efi-bgrt.c efi/bgrt: Use efi_mem_type() 2017-08-26 09:20:33 +02:00
efi-pstore.c pstore: Populate pstore record->time field 2017-05-31 10:13:44 -07:00
efi.c efi: Move efi_mem_type() to common code 2017-08-26 09:20:33 +02:00
efibc.c efibc: Report more information in the error messages 2016-06-27 13:06:54 +02:00
efivars.c efi: Don't use spinlocks for efi vars 2016-09-09 16:08:42 +01:00
esrt.c firmware/efi/esrt: Constify attribute_group structures 2017-08-21 09:43:51 +02:00
fake_mem.c x86/efi: Don't allocate memmap through memblock after mm_init() 2017-01-07 08:58:07 +01:00
Kconfig efi/libstub: Enable reset attack mitigation 2017-08-26 09:20:33 +02:00
Makefile x86/efi/bgrt: Move efi-bgrt handling out of arch/x86 2017-04-05 12:27:24 +02:00
memattr.c x86/efi: Add support for EFI_MEMORY_ATTRIBUTES_TABLE 2017-02-01 08:45:44 +01:00
memmap.c x86/efi: Don't allocate memmap through memblock after mm_init() 2017-01-07 08:58:07 +01:00
reboot.c efi/reboot: Make function pointer orig_pm_power_off static 2017-08-26 09:20:33 +02:00
runtime-map.c efi/runtime-map: Use efi.memmap directly instead of a copy 2016-09-09 16:08:36 +01:00
runtime-wrappers.c efi: Replace runtime services spinlock with semaphore 2016-09-09 16:08:43 +01:00
vars.c efi: Don't use spinlocks for efi vars 2016-09-09 16:08:42 +01:00