[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

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.