x86/boot: Move kernel cmdline setup earlier in the boot process (again)
When split_lock_detect=off (or similar) is specified in CONFIG_CMDLINE, its effect is lost. The flow is currently this: setup_arch(): -> early_cpu_init() -> early_identify_cpu() -> sld_setup() -> sld_state_setup() -> Looks for split_lock_detect in boot_command_line -> e820__memory_setup() -> Assemble final command line: boot_command_line = builtin_cmdline + boot_cmdline -> parse_early_param() There were earlier attempts at fixing this in:8d48bf8206
("x86/boot: Pull up cmdline preparation and early param parsing") later reverted in:fbe6183998
("Revert "x86/boot: Pull up cmdline preparation and early param parsing"") ... because parse_early_param() can't be called before e820__memory_setup(). In this patch, we just move the command line concatenation to the beginning of early_cpu_init(). This should fix sld_state_setup(), while not running in the same issues as the earlier attempt. The order is now: setup_arch(): -> Assemble final command line: boot_command_line = builtin_cmdline + boot_cmdline -> early_cpu_init() -> early_identify_cpu() -> sld_setup() -> sld_state_setup() -> Looks for split_lock_detect in boot_command_line -> e820__memory_setup() -> parse_early_param() Signed-off-by: Julian Stecklina <julian.stecklina@cyberus-technology.de> Signed-off-by: Ingo Molnar <mingo@kernel.org> Cc: Kees Cook <keescook@chromium.org> Cc: linux-kernel@vger.kernel.org
This commit is contained in:
parent
17608373cf
commit
4faa0e5d6d
@ -753,6 +753,22 @@ void __init setup_arch(char **cmdline_p)
|
|||||||
boot_cpu_data.x86_phys_bits = MAX_PHYSMEM_BITS;
|
boot_cpu_data.x86_phys_bits = MAX_PHYSMEM_BITS;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_CMDLINE_BOOL
|
||||||
|
#ifdef CONFIG_CMDLINE_OVERRIDE
|
||||||
|
strscpy(boot_command_line, builtin_cmdline, COMMAND_LINE_SIZE);
|
||||||
|
#else
|
||||||
|
if (builtin_cmdline[0]) {
|
||||||
|
/* append boot loader cmdline to builtin */
|
||||||
|
strlcat(builtin_cmdline, " ", COMMAND_LINE_SIZE);
|
||||||
|
strlcat(builtin_cmdline, boot_command_line, COMMAND_LINE_SIZE);
|
||||||
|
strscpy(boot_command_line, builtin_cmdline, COMMAND_LINE_SIZE);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
strscpy(command_line, boot_command_line, COMMAND_LINE_SIZE);
|
||||||
|
*cmdline_p = command_line;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If we have OLPC OFW, we might end up relocating the fixmap due to
|
* If we have OLPC OFW, we might end up relocating the fixmap due to
|
||||||
* reserve_top(), so do this before touching the ioremap area.
|
* reserve_top(), so do this before touching the ioremap area.
|
||||||
@ -832,22 +848,6 @@ void __init setup_arch(char **cmdline_p)
|
|||||||
bss_resource.start = __pa_symbol(__bss_start);
|
bss_resource.start = __pa_symbol(__bss_start);
|
||||||
bss_resource.end = __pa_symbol(__bss_stop)-1;
|
bss_resource.end = __pa_symbol(__bss_stop)-1;
|
||||||
|
|
||||||
#ifdef CONFIG_CMDLINE_BOOL
|
|
||||||
#ifdef CONFIG_CMDLINE_OVERRIDE
|
|
||||||
strscpy(boot_command_line, builtin_cmdline, COMMAND_LINE_SIZE);
|
|
||||||
#else
|
|
||||||
if (builtin_cmdline[0]) {
|
|
||||||
/* append boot loader cmdline to builtin */
|
|
||||||
strlcat(builtin_cmdline, " ", COMMAND_LINE_SIZE);
|
|
||||||
strlcat(builtin_cmdline, boot_command_line, COMMAND_LINE_SIZE);
|
|
||||||
strscpy(boot_command_line, builtin_cmdline, COMMAND_LINE_SIZE);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
strscpy(command_line, boot_command_line, COMMAND_LINE_SIZE);
|
|
||||||
*cmdline_p = command_line;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* x86_configure_nx() is called before parse_early_param() to detect
|
* x86_configure_nx() is called before parse_early_param() to detect
|
||||||
* whether hardware doesn't support NX (so that the early EHCI debug
|
* whether hardware doesn't support NX (so that the early EHCI debug
|
||||||
|
Loading…
Reference in New Issue
Block a user