diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c index 72920af0b3c0..c5ee06f7a8b7 100644 --- a/arch/x86/kernel/setup.c +++ b/arch/x86/kernel/setup.c @@ -743,14 +743,6 @@ static void __init early_reserve_memory(void) memblock_reserve(0, ALIGN(reserve_low, PAGE_SIZE)); early_reserve_initrd(); - - if (efi_enabled(EFI_BOOT)) - efi_memblock_x86_reserve_range(); - - memblock_x86_reserve_range_setup_data(); - - reserve_ibft_region(); - reserve_bios_regions(); } /* @@ -921,6 +913,10 @@ void __init setup_arch(char **cmdline_p) */ early_reserve_memory(); + if (efi_enabled(EFI_BOOT)) + efi_memblock_x86_reserve_range(); + + #ifdef CONFIG_MEMORY_HOTPLUG /* * Memory used by the kernel cannot be hot-removed because Linux @@ -947,6 +943,9 @@ void __init setup_arch(char **cmdline_p) x86_report_nx(); + /* after early param, so could get panic from serial */ + memblock_x86_reserve_range_setup_data(); + if (acpi_mps_check()) { #ifdef CONFIG_X86_LOCAL_APIC disable_apic = 1; @@ -1038,6 +1037,8 @@ void __init setup_arch(char **cmdline_p) */ find_smp_config(); + reserve_ibft_region(); + early_alloc_pgt_buf(); /* @@ -1058,6 +1059,8 @@ void __init setup_arch(char **cmdline_p) */ sev_setup_arch(); + reserve_bios_regions(); + efi_fake_memmap(); efi_find_mirror(); efi_esrt_init();