[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

 


Rackspace

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