Skip to content

Commit fbe6183

Browse files
committed
Revert "x86/boot: Pull up cmdline preparation and early param parsing"
This reverts commit 8d48bf8. It turned out to be a bad idea as it broke supplying mem= cmdline parameters due to parse_memopt() requiring preparatory work like setting up the e820 table in e820__memory_setup() in order to be able to exclude the range specified by mem=. Pulling that up would've broken Xen PV again, see threads at https://lkml.kernel.org/r/[email protected] due to xen_memory_setup() needing the first reservations in early_reserve_memory() - kernel and initrd - to have happened already. This could be fixed again by having Xen do those reservations itself... Long story short, revert this and do a simpler fix in a later patch. Signed-off-by: Borislav Petkov <[email protected]> Link: https://lore.kernel.org/r/[email protected]
1 parent 58e138d commit fbe6183

File tree

1 file changed

+27
-39
lines changed

1 file changed

+27
-39
lines changed

arch/x86/kernel/setup.c

Lines changed: 27 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -742,28 +742,6 @@ dump_kernel_offset(struct notifier_block *self, unsigned long v, void *p)
742742
return 0;
743743
}
744744

745-
static char *prepare_command_line(void)
746-
{
747-
#ifdef CONFIG_CMDLINE_BOOL
748-
#ifdef CONFIG_CMDLINE_OVERRIDE
749-
strlcpy(boot_command_line, builtin_cmdline, COMMAND_LINE_SIZE);
750-
#else
751-
if (builtin_cmdline[0]) {
752-
/* append boot loader cmdline to builtin */
753-
strlcat(builtin_cmdline, " ", COMMAND_LINE_SIZE);
754-
strlcat(builtin_cmdline, boot_command_line, COMMAND_LINE_SIZE);
755-
strlcpy(boot_command_line, builtin_cmdline, COMMAND_LINE_SIZE);
756-
}
757-
#endif
758-
#endif
759-
760-
strlcpy(command_line, boot_command_line, COMMAND_LINE_SIZE);
761-
762-
parse_early_param();
763-
764-
return command_line;
765-
}
766-
767745
/*
768746
* Determine if we were loaded by an EFI loader. If so, then we have also been
769747
* passed the efi memmap, systab, etc., so we should use these data structures
@@ -852,23 +830,6 @@ void __init setup_arch(char **cmdline_p)
852830

853831
x86_init.oem.arch_setup();
854832

855-
/*
856-
* x86_configure_nx() is called before parse_early_param() (called by
857-
* prepare_command_line()) to detect whether hardware doesn't support
858-
* NX (so that the early EHCI debug console setup can safely call
859-
* set_fixmap()). It may then be called again from within noexec_setup()
860-
* during parsing early parameters to honor the respective command line
861-
* option.
862-
*/
863-
x86_configure_nx();
864-
865-
/*
866-
* This parses early params and it needs to run before
867-
* early_reserve_memory() because latter relies on such settings
868-
* supplied as early params.
869-
*/
870-
*cmdline_p = prepare_command_line();
871-
872833
/*
873834
* Do some memory reservations *before* memory is added to memblock, so
874835
* memblock allocations won't overwrite it.
@@ -902,6 +863,33 @@ void __init setup_arch(char **cmdline_p)
902863
bss_resource.start = __pa_symbol(__bss_start);
903864
bss_resource.end = __pa_symbol(__bss_stop)-1;
904865

866+
#ifdef CONFIG_CMDLINE_BOOL
867+
#ifdef CONFIG_CMDLINE_OVERRIDE
868+
strlcpy(boot_command_line, builtin_cmdline, COMMAND_LINE_SIZE);
869+
#else
870+
if (builtin_cmdline[0]) {
871+
/* append boot loader cmdline to builtin */
872+
strlcat(builtin_cmdline, " ", COMMAND_LINE_SIZE);
873+
strlcat(builtin_cmdline, boot_command_line, COMMAND_LINE_SIZE);
874+
strlcpy(boot_command_line, builtin_cmdline, COMMAND_LINE_SIZE);
875+
}
876+
#endif
877+
#endif
878+
879+
strlcpy(command_line, boot_command_line, COMMAND_LINE_SIZE);
880+
*cmdline_p = command_line;
881+
882+
/*
883+
* x86_configure_nx() is called before parse_early_param() to detect
884+
* whether hardware doesn't support NX (so that the early EHCI debug
885+
* console setup can safely call set_fixmap()). It may then be called
886+
* again from within noexec_setup() during parsing early parameters
887+
* to honor the respective command line option.
888+
*/
889+
x86_configure_nx();
890+
891+
parse_early_param();
892+
905893
#ifdef CONFIG_MEMORY_HOTPLUG
906894
/*
907895
* Memory used by the kernel cannot be hot-removed because Linux

0 commit comments

Comments
 (0)