mirror of https://gitee.com/openkylin/linux.git
x86/efi: Push EFI_MEMMAP check into leaf routines
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>
This commit is contained in:
parent
fe3e5e65c0
commit
6950e31b35
|
@ -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 */
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue