Skip to content
  • Matt Fleming's avatar
    efi: Allow drivers to reserve boot services forever · 816e7612
    Matt Fleming authored
    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
    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 <> [kexec/kdump]
    Tested-by: Ard Biesheuvel <> [arm]
    Acked-by: default avatarArd Biesheuvel <>
    Cc: Leif Lindholm <>
    Cc: Peter Jones <>
    Cc: Borislav Petkov <>
    Cc: Mark Rutland <>
    Signed-off-by: default avatarMatt Fleming <>