x86/efi: Push EFI_MEMMAP check into leaf routines
authorDan Williams <dan.j.williams@intel.com>
Thu, 7 Nov 2019 01:43:05 +0000 (17:43 -0800)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 7 Nov 2019 14:44:04 +0000 (15:44 +0100)
In preparation for adding another EFI_MEMMAP dependent call that needs
to occur before e820__memblock_setup() fixup the existing efi calls to
check for EFI_MEMMAP internally. This ends up being cleaner than the
alternative of checking EFI_MEMMAP multiple times in setup_arch().

Reviewed-by: Dave Hansen <dave.hansen@linux.intel.com>
Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
arch/x86/include/asm/efi.h
arch/x86/kernel/setup.c
arch/x86/platform/efi/efi.c
arch/x86/platform/efi/quirks.c
drivers/firmware/efi/esrt.c
drivers/firmware/efi/fake_mem.c
include/linux/efi.h

index 43a82e5..45f853b 100644 (file)
@@ -140,7 +140,6 @@ extern void efi_delete_dummy_variable(void);
 extern void efi_switch_mm(struct mm_struct *mm);
 extern void efi_recover_from_page_fault(unsigned long phys_addr);
 extern void efi_free_boot_services(void);
-extern void efi_reserve_boot_services(void);
 
 struct efi_setup_data {
        u64 fw_vendor;
@@ -244,6 +243,8 @@ static inline bool efi_is_64bit(void)
 extern bool efi_reboot_required(void);
 extern bool efi_is_table_address(unsigned long phys_addr);
 
+extern void efi_find_mirror(void);
+extern void efi_reserve_boot_services(void);
 #else
 static inline void parse_efi_setup(u64 phys_addr, u32 data_len) {}
 static inline bool efi_reboot_required(void)
@@ -254,6 +255,12 @@ static inline  bool efi_is_table_address(unsigned long phys_addr)
 {
        return false;
 }
+static inline void efi_find_mirror(void)
+{
+}
+static inline void efi_reserve_boot_services(void)
+{
+}
 #endif /* CONFIG_EFI */
 
 #endif /* _ASM_X86_EFI_H */
index 77ea96b..1c4b866 100644 (file)
@@ -1122,17 +1122,15 @@ void __init setup_arch(char **cmdline_p)
 
        reserve_bios_regions();
 
-       if (efi_enabled(EFI_MEMMAP)) {
-               efi_fake_memmap();
-               efi_find_mirror();
-               efi_esrt_init();
+       efi_fake_memmap();
+       efi_find_mirror();
+       efi_esrt_init();
 
-               /*
-                * The EFI specification says that boot service code won't be
-                * called after ExitBootServices(). This is, in fact, a lie.
-                */
-               efi_reserve_boot_services();
-       }
+       /*
+        * The EFI specification says that boot service code won't be
+        * called after ExitBootServices(). This is, in fact, a lie.
+        */
+       efi_reserve_boot_services();
 
        /* preallocate 4k for mptable mpc */
        e820__memblock_alloc_reserved_mpc_new();
index 425e025..e6e41b1 100644 (file)
@@ -128,6 +128,9 @@ void __init efi_find_mirror(void)
        efi_memory_desc_t *md;
        u64 mirror_size = 0, total_size = 0;
 
+       if (!efi_enabled(EFI_MEMMAP))
+               return;
+
        for_each_efi_memory_desc(md) {
                unsigned long long start = md->phys_addr;
                unsigned long long size = md->num_pages << EFI_PAGE_SHIFT;
index 3b9fd67..7675cf7 100644 (file)
@@ -320,6 +320,9 @@ void __init efi_reserve_boot_services(void)
 {
        efi_memory_desc_t *md;
 
+       if (!efi_enabled(EFI_MEMMAP))
+               return;
+
        for_each_efi_memory_desc(md) {
                u64 start = md->phys_addr;
                u64 size = md->num_pages << EFI_PAGE_SHIFT;
index d6dd5f5..2762e06 100644 (file)
@@ -246,6 +246,9 @@ void __init efi_esrt_init(void)
        int rc;
        phys_addr_t end;
 
+       if (!efi_enabled(EFI_MEMMAP))
+               return;
+
        pr_debug("esrt-init: loading.\n");
        if (!esrt_table_exists())
                return;
index 9501edc..526b453 100644 (file)
@@ -44,7 +44,7 @@ void __init efi_fake_memmap(void)
        void *new_memmap;
        int i;
 
-       if (!nr_fake_mem)
+       if (!efi_enabled(EFI_MEMMAP) || !nr_fake_mem)
                return;
 
        /* count up the number of EFI memory descriptor */
index 78c7599..44c85b5 100644 (file)
@@ -1045,7 +1045,6 @@ extern void efi_enter_virtual_mode (void);        /* switch EFI to virtual mode, if pos
 extern efi_status_t efi_query_variable_store(u32 attributes,
                                             unsigned long size,
                                             bool nonblocking);
-extern void efi_find_mirror(void);
 #else
 
 static inline efi_status_t efi_query_variable_store(u32 attributes,