Commit 6950e31b authored by Dan Williams's avatar Dan Williams Committed by Rafael J. Wysocki
Browse files

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: default avatarDave Hansen <dave.hansen@linux.intel.com>
Reviewed-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
Acked-by: default avatarThomas Gleixner <tglx@linutronix.de>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent fe3e5e65
Loading
Loading
Loading
Loading
+8 −1
Original line number Original line Diff line number Diff line
@@ -140,7 +140,6 @@ extern void efi_delete_dummy_variable(void);
extern void efi_switch_mm(struct mm_struct *mm);
extern void efi_switch_mm(struct mm_struct *mm);
extern void efi_recover_from_page_fault(unsigned long phys_addr);
extern void efi_recover_from_page_fault(unsigned long phys_addr);
extern void efi_free_boot_services(void);
extern void efi_free_boot_services(void);
extern void efi_reserve_boot_services(void);


struct efi_setup_data {
struct efi_setup_data {
	u64 fw_vendor;
	u64 fw_vendor;
@@ -244,6 +243,8 @@ static inline bool efi_is_64bit(void)
extern bool efi_reboot_required(void);
extern bool efi_reboot_required(void);
extern bool efi_is_table_address(unsigned long phys_addr);
extern bool efi_is_table_address(unsigned long phys_addr);


extern void efi_find_mirror(void);
extern void efi_reserve_boot_services(void);
#else
#else
static inline void parse_efi_setup(u64 phys_addr, u32 data_len) {}
static inline void parse_efi_setup(u64 phys_addr, u32 data_len) {}
static inline bool efi_reboot_required(void)
static inline bool efi_reboot_required(void)
@@ -254,6 +255,12 @@ static inline bool efi_is_table_address(unsigned long phys_addr)
{
{
	return false;
	return false;
}
}
static inline void efi_find_mirror(void)
{
}
static inline void efi_reserve_boot_services(void)
{
}
#endif /* CONFIG_EFI */
#endif /* CONFIG_EFI */


#endif /* _ASM_X86_EFI_H */
#endif /* _ASM_X86_EFI_H */
+8 −10
Original line number Original line Diff line number Diff line
@@ -1122,7 +1122,6 @@ void __init setup_arch(char **cmdline_p)


	reserve_bios_regions();
	reserve_bios_regions();


	if (efi_enabled(EFI_MEMMAP)) {
	efi_fake_memmap();
	efi_fake_memmap();
	efi_find_mirror();
	efi_find_mirror();
	efi_esrt_init();
	efi_esrt_init();
@@ -1132,7 +1131,6 @@ void __init setup_arch(char **cmdline_p)
	 * called after ExitBootServices(). This is, in fact, a lie.
	 * called after ExitBootServices(). This is, in fact, a lie.
	 */
	 */
	efi_reserve_boot_services();
	efi_reserve_boot_services();
	}


	/* preallocate 4k for mptable mpc */
	/* preallocate 4k for mptable mpc */
	e820__memblock_alloc_reserved_mpc_new();
	e820__memblock_alloc_reserved_mpc_new();
+3 −0
Original line number Original line Diff line number Diff line
@@ -128,6 +128,9 @@ void __init efi_find_mirror(void)
	efi_memory_desc_t *md;
	efi_memory_desc_t *md;
	u64 mirror_size = 0, total_size = 0;
	u64 mirror_size = 0, total_size = 0;


	if (!efi_enabled(EFI_MEMMAP))
		return;

	for_each_efi_memory_desc(md) {
	for_each_efi_memory_desc(md) {
		unsigned long long start = md->phys_addr;
		unsigned long long start = md->phys_addr;
		unsigned long long size = md->num_pages << EFI_PAGE_SHIFT;
		unsigned long long size = md->num_pages << EFI_PAGE_SHIFT;
+3 −0
Original line number Original line Diff line number Diff line
@@ -320,6 +320,9 @@ void __init efi_reserve_boot_services(void)
{
{
	efi_memory_desc_t *md;
	efi_memory_desc_t *md;


	if (!efi_enabled(EFI_MEMMAP))
		return;

	for_each_efi_memory_desc(md) {
	for_each_efi_memory_desc(md) {
		u64 start = md->phys_addr;
		u64 start = md->phys_addr;
		u64 size = md->num_pages << EFI_PAGE_SHIFT;
		u64 size = md->num_pages << EFI_PAGE_SHIFT;
+3 −0
Original line number Original line Diff line number Diff line
@@ -246,6 +246,9 @@ void __init efi_esrt_init(void)
	int rc;
	int rc;
	phys_addr_t end;
	phys_addr_t end;


	if (!efi_enabled(EFI_MEMMAP))
		return;

	pr_debug("esrt-init: loading.\n");
	pr_debug("esrt-init: loading.\n");
	if (!esrt_table_exists())
	if (!esrt_table_exists())
		return;
		return;
Loading