• 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
    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: default avatarArd 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: default avatarMatt Fleming <matt@codeblueprint.co.uk>
    816e7612
efi.c 20.1 KB