[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] common: allow a default compiled-in command line using Kconfig
commit 27ef1ec55ef800af51f548c0a60ff27a9f17d799 Author: Zhongze Liu <blackskygg@xxxxxxxxx> AuthorDate: Tue Mar 21 15:14:21 2017 +0100 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Tue Mar 21 15:20:30 2017 +0100 common: 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) 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> [jb: fix non-EXPERT build] Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx> --- xen/common/Kconfig | 21 +++++++++++++++++++++ xen/common/kernel.c | 30 ++++++++++++++++++++++++------ 2 files changed, 45 insertions(+), 6 deletions(-) diff --git a/xen/common/Kconfig b/xen/common/Kconfig index f2ecbc4..5334be3 100644 --- a/xen/common/Kconfig +++ b/xen/common/Kconfig @@ -237,4 +237,25 @@ config FAST_SYMBOL_LOOKUP The only user of this is Live patching. If unsure, say Y. + +config CMDLINE + string "Built-in hypervisor command string" if EXPERT = "y" + default "" + ---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 a4ae612..8461871 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) || -- generated by git-patchbot for /home/xen/git/xen.git#master _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx https://lists.xenproject.org/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |