[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v7] xen: Allow a default compiled-in command line using Kconfig
This allows downstreams to set their defaults without modifying the source code all over the place. Also probably useful for the embedded space. (See Also: https://xenproject.atlassian.net/browse/XEN-41) Added 2 new config entries in common/Kconfig: CMDLINE and CMDLINE_OVERRIDE Modified common/kernel.c:cmdline_parse(). The 2 new entries enable an embedded command line to be compiled in the hypervisor. CMDLINE depends on EXPERT = "y", and CMDLINE_OVERRIDE depends on CMDLINE != "". If CMDLINE is set, it will be parsed prior to the bootloader command line. This order of parsing implies that if any non-cumulative options are set in both CMDLINE and the bootloader command line, only the ones in the latter will take effect. Furthermore, if CMDLINE_OVERRIDE is set to y, the whole bootloader command line will be ignored, which will be useful to work around broken bootloaders. A wrapper to the original common/kernel.c:cmdline_parse() was introduced to complete this task. Signed-off-by: Zhongze Liu <blackskygg@xxxxxxxxx> Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx> Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Cc: George Dunlap <George.Dunlap@xxxxxxxxxxxxx> Cc: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> Cc: Jan Beulich <jbeulich@xxxxxxxx> Cc: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx> Cc: Stefano Stabellini <sstabellini@xxxxxxxxxx> Cc: Tim Deegan <tim@xxxxxxx> Cc: Wei Liu <wei.liu2@xxxxxxxxxx> --- Changed since v6: * Adjusted the ordering of paragraphs in the commit message, with the motivation of this patch being the first paragraph now. * Fixed some typos in the commit message. --- xen/common/Kconfig | 22 ++++++++++++++++++++++ xen/common/kernel.c | 30 ++++++++++++++++++++++++------ 2 files changed, 46 insertions(+), 6 deletions(-) diff --git a/xen/common/Kconfig b/xen/common/Kconfig index f2ecbc43d6..e1c90b739a 100644 --- a/xen/common/Kconfig +++ b/xen/common/Kconfig @@ -237,4 +237,26 @@ config FAST_SYMBOL_LOOKUP The only user of this is Live patching. If unsure, say Y. + +config CMDLINE + string "Built-in hypervisor command string" + default "" + depends on EXPERT = "y" + ---help--- + Enter arguments here that should be compiled into the hypervisor + image and used at boot time. When the system boots, this string + will be parsed prior to the bootloader command line. So if a + non-cumulative option is set both in this string and in the + bootloader command line, only the latter one will take effect. + +config CMDLINE_OVERRIDE + bool "Built-in command line overrides bootloader arguments" + default n + depends on CMDLINE != "" + ---help--- + Set this option to 'Y' to have the hypervisor ignore the bootloader + command line, and use ONLY the built-in command line. + + This is used to work around broken bootloaders. This should + be set to 'N' under normal conditions. endmenu diff --git a/xen/common/kernel.c b/xen/common/kernel.c index 4b87c60845..64920e8304 100644 --- a/xen/common/kernel.c +++ b/xen/common/kernel.c @@ -23,6 +23,7 @@ enum system_state system_state = SYS_STATE_early_boot; xen_commandline_t saved_cmdline; +static const char __initconst opt_builtin_cmdline[] = CONFIG_CMDLINE; static void __init assign_integer_param( const struct kernel_param *param, uint64_t val) @@ -46,18 +47,13 @@ static void __init assign_integer_param( } } -void __init cmdline_parse(const char *cmdline) +static void __init _cmdline_parse(const char *cmdline) { char opt[100], *optval, *optkey, *q; const char *p = cmdline; const struct kernel_param *param; int bool_assert; - if ( cmdline == NULL ) - return; - - safe_strcpy(saved_cmdline, cmdline); - for ( ; ; ) { /* Skip whitespace. */ @@ -147,6 +143,28 @@ void __init cmdline_parse(const char *cmdline) } } +/** + * cmdline_parse -- parses the xen command line. + * If CONFIG_CMDLINE is set, it would be parsed prior to @cmdline. + * But if CONFIG_CMDLINE_OVERRIDE is set to y, @cmdline will be ignored. + */ +void __init cmdline_parse(const char *cmdline) +{ + if ( opt_builtin_cmdline[0] ) + { + printk("Built-in command line: %s\n", opt_builtin_cmdline); + _cmdline_parse(opt_builtin_cmdline); + } + +#ifndef CONFIG_CMDLINE_OVERRIDE + if ( cmdline == NULL ) + return; + + safe_strcpy(saved_cmdline, cmdline); + _cmdline_parse(cmdline); +#endif +} + int __init parse_bool(const char *s) { if ( !strcmp("no", s) || -- 2.12.0 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |