linux/drivers/firmware/efi
Matt Fleming 816e76129e efi: Allow drivers to reserve boot services forever
Today, it is not possible for drivers to reserve EFI boot services for
access after efi_free_boot_services() has been called on x86. For
ARM/arm64 it can be done simply by calling memblock_reserve().

Having this ability for all three architectures is desirable for a
couple of reasons,

  1) It saves drivers copying data out of those regions
  2) kexec reboot can now make use of things like ESRT

Instead of using the standard memblock_reserve() which is insufficient
to reserve the region on x86 (see efi_reserve_boot_services()), a new
API is introduced in this patch; efi_mem_reserve().

efi.memmap now always represents which EFI memory regions are
available. On x86 the EFI boot services regions that have not been
reserved via efi_mem_reserve() will be removed from efi.memmap during
efi_free_boot_services().

This has implications for kexec, since it is not possible for a newly
kexec'd kernel to access the same boot services regions that the
initial boot kernel had access to unless they are reserved by every
kexec kernel in the chain.

Tested-by: Dave Young <dyoung@redhat.com> [kexec/kdump]
Tested-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> [arm]
Acked-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: Leif Lindholm <leif.lindholm@linaro.org>
Cc: Peter Jones <pjones@redhat.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Matt Fleming <matt@codeblueprint.co.uk>
2016-09-09 16:08:34 +01:00
..
libstub arm64 updates for 4.7: 2016-05-16 17:17:24 -07:00
arm-init.c efi: Refactor efi_memmap_init_early() into arch-neutral code 2016-09-09 16:06:38 +01:00
arm-runtime.c efi: Add efi_memmap_init_late() for permanent EFI memmap 2016-09-09 16:07:43 +01:00
capsule-loader.c efi/capsule: Allocate whole capsule into virtual memory 2016-08-11 13:55:36 +02:00
capsule.c efi/capsule: Allocate whole capsule into virtual memory 2016-08-11 13:55:36 +02:00
cper.c efi: Handle memory error structures produced based on old versions of standard 2015-07-15 13:30:38 +01:00
efi-pstore.c efi-pstore: implement efivars_pstore_exit() 2016-06-02 11:25:31 -07:00
efi.c efi: Allow drivers to reserve boot services forever 2016-09-09 16:08:34 +01:00
efibc.c efibc: Report more information in the error messages 2016-06-27 13:06:54 +02:00
efivars.c efi: Merge boolean flag arguments 2016-05-07 07:06:13 +02:00
esrt.c efi/esrt: Don't preformat name 2015-12-14 15:24:03 +00:00
fake_mem.c efi: Add efi_memmap_install() for installing new EFI memory maps 2016-09-09 16:07:47 +01:00
Kconfig efi: Add misc char driver interface to update EFI firmware 2016-04-28 11:34:05 +02:00
Makefile efi: Split out EFI memory map functions into new file 2016-09-09 16:07:46 +01:00
memattr.c efi: Implement generic support for the Memory Attributes table 2016-04-28 11:33:54 +02:00
memmap.c efi: Add efi_memmap_install() for installing new EFI memory maps 2016-09-09 16:07:47 +01:00
reboot.c efi: Add 'capsule' update support 2016-04-28 11:34:03 +02:00
runtime-map.c efi: Fix error handling in add_sysfs_runtime_map_entry() 2015-05-05 16:20:13 +01:00
runtime-wrappers.c efi: Convert efi_call_virt() to efi_call_virt_pointer() 2016-06-27 13:06:56 +02:00
vars.c efi: Merge boolean flag arguments 2016-05-07 07:06:13 +02:00