Skip to content

Commit 2f5b351

Browse files
rpptsuryasaimadhu
authored andcommitted
x86/boot: Move EFI range reservation after cmdline parsing
The memory reservation in arch/x86/platform/efi/efi.c depends on at least two command line parameters. Put it back later in the boot process and move efi_memblock_x86_reserve_range() out of early_memory_reserve(). An attempt to fix this was done in 8d48bf8 ("x86/boot: Pull up cmdline preparation and early param parsing") but that caused other troubles so it got reverted. The bug this is addressing is: Dan reports that Anjaneya Chagam can no longer use the efi=nosoftreserve kernel command line parameter to suppress "soft reservation" behavior. This is due to the fact that the following call-chain happens at boot: early_reserve_memory |-> efi_memblock_x86_reserve_range |-> efi_fake_memmap_early which does if (!efi_soft_reserve_enabled()) return; and that would have set EFI_MEM_NO_SOFT_RESERVE after having parsed "nosoftreserve". However, parse_early_param() gets called *after* it, leading to the boot cmdline not being taken into account. See also https://lore.kernel.org/r/[email protected] [ bp: Turn into a proper patch. ] Signed-off-by: Mike Rapoport <[email protected]> Signed-off-by: Borislav Petkov <[email protected]> Link: https://lore.kernel.org/r/[email protected]
1 parent fbe6183 commit 2f5b351

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

arch/x86/kernel/setup.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -713,9 +713,6 @@ static void __init early_reserve_memory(void)
713713

714714
early_reserve_initrd();
715715

716-
if (efi_enabled(EFI_BOOT))
717-
efi_memblock_x86_reserve_range();
718-
719716
memblock_x86_reserve_range_setup_data();
720717

721718
reserve_ibft_region();
@@ -890,6 +887,9 @@ void __init setup_arch(char **cmdline_p)
890887

891888
parse_early_param();
892889

890+
if (efi_enabled(EFI_BOOT))
891+
efi_memblock_x86_reserve_range();
892+
893893
#ifdef CONFIG_MEMORY_HOTPLUG
894894
/*
895895
* Memory used by the kernel cannot be hot-removed because Linux

0 commit comments

Comments
 (0)