[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v6] xen: Allow a default compiled-in command line using Kconfig
On Tue, 21 Mar 2017, Zhongze Liu wrote: > Added 2 new config entries in common/Kconfig: > CMDLINE and CMDLINE_OVERRIDE > Modifed 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. Further more, 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. > > 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) > > Signed-off-by: Zhongze Liu <blackskygg@xxxxxxxxx> 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 v5: > * remove the redundent EXPERT = "y" dependency from config CMDLINE_OVERRIDE > * make opt_builtin_cmdline[] static and __initconst > * changed the name do_cmdline_parse() to _cmdline_parse() > * do a NULL check before copying cmdline to saved_cmdline > * check the first byte of opt_builtin_cmdline to determine whether it's > empty or not. > --- > 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 |