• Ard Biesheuvel's avatar
    efi/unaccepted: Use ACPI reclaim memory for unaccepted memory table · e7761d82
    Ard Biesheuvel authored
    Kyril reports that crashkernels fail to work on confidential VMs that
    rely on the unaccepted memory table, and this appears to be caused by
    the fact that it is not considered part of the set of firmware tables
    that the crashkernel needs to map.
    
    This is an oversight, and a result of the use of the EFI_LOADER_DATA
    memory type for this table. The correct memory type to use for any
    firmware table is EFI_ACPI_RECLAIM_MEMORY (including ones created by the
    EFI stub), even though the name suggests that is it specific to ACPI.
    ACPI reclaim means that the memory is used by the firmware to expose
    information to the operating system, but that the memory region has no
    special significance to the firmware itself, and the OS is free to
    reclaim the memory and use it as ordinary memory if it is not interested
    in the contents, or if it has already consumed them. In Linux, this
    memory is never reclaimed, but it is always covered by the kernel direct
    map and generally made accessible as ordinary memory.
    
    On x86, ACPI reclaim memory is translated into E820_ACPI, which the
    kexec logic already recognizes as memory that the crashkernel may need
    to to access, and so it will be mapped and accessible to the booting
    crash kernel.
    
    Fixes: 745e3ed8 ("efi/libstub: Implement support for unaccepted memory")
    Reported-by: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Signed-off-by: default avatarArd Biesheuvel <ardb@kernel.org>
    e7761d82
unaccepted_memory.c 6.67 KB