efi: Actually enable the ESRT under Xen
authorDemi Marie Obenour <demi@invisiblethingslab.com>
Thu, 19 Jan 2023 19:03:59 +0000 (14:03 -0500)
committerArd Biesheuvel <ardb@kernel.org>
Mon, 23 Jan 2023 10:33:24 +0000 (11:33 +0100)
The ESRT can be parsed if EFI_PARAVIRT is enabled, even if EFI_MEMMAP is
not.  Also allow the ESRT to be in reclaimable memory, as that is where
future Xen versions will put it.

Reported-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
Signed-off-by: Demi Marie Obenour <demi@invisiblethingslab.com>
Tested-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
drivers/firmware/efi/esrt.c

index fb9fb70..87729c3 100644 (file)
@@ -247,7 +247,7 @@ void __init efi_esrt_init(void)
        int rc;
        phys_addr_t end;
 
-       if (!efi_enabled(EFI_MEMMAP))
+       if (!efi_enabled(EFI_MEMMAP) && !efi_enabled(EFI_PARAVIRT))
                return;
 
        pr_debug("esrt-init: loading.\n");
@@ -258,7 +258,9 @@ void __init efi_esrt_init(void)
        if (rc < 0 ||
            (!(md.attribute & EFI_MEMORY_RUNTIME) &&
             md.type != EFI_BOOT_SERVICES_DATA &&
-            md.type != EFI_RUNTIME_SERVICES_DATA)) {
+            md.type != EFI_RUNTIME_SERVICES_DATA &&
+            md.type != EFI_ACPI_RECLAIM_MEMORY &&
+            md.type != EFI_ACPI_MEMORY_NVS)) {
                pr_warn("ESRT header is not in the memory map.\n");
                return;
        }