From: Zhongze Liu <blackskygg@gmail.com>
To: xen-devel@lists.xenproject.org
Cc: Stefano Stabellini <sstabellini@kernel.org>,
Wei Liu <wei.liu2@citrix.com>, Zhongze Liu <blackskygg@gmail.com>,
George Dunlap <George.Dunlap@eu.citrix.com>,
Andrew Cooper <andrew.cooper3@citrix.com>,
Ian Jackson <ian.jackson@eu.citrix.com>, Tim Deegan <tim@xen.org>,
Jan Beulich <jbeulich@suse.com>
Subject: [PATCH v9] xen: Allow a default compiled-in command line using Kconfig
Date: Wed, 22 Mar 2017 00:41:01 +0800 [thread overview]
Message-ID: <20170321164101.19127-1-blackskygg@gmail.com> (raw)
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@gmail.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: George Dunlap <George.Dunlap@eu.citrix.com>
Cc: Ian Jackson <ian.jackson@eu.citrix.com>
Cc: Jan Beulich <jbeulich@suse.com>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Stefano Stabellini <sstabellini@kernel.org>
Cc: Tim Deegan <tim@xen.org>
Cc: Wei Liu <wei.liu2@citrix.com>
---
Changed since v8:
* Changed the CMDLINE's "depends on EXPERT='y'" into a
conditional prompt.
---
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 f2ecbc43d6..5334be38a9 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 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@lists.xen.org
https://lists.xen.org/xen-devel
next reply other threads:[~2017-03-21 16:41 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-03-21 16:41 Zhongze Liu [this message]
2017-03-21 16:42 ` [PATCH v9] xen: Allow a default compiled-in command line using Kconfig Wei Liu
2017-03-21 16:55 ` Stefano Stabellini
2017-03-22 0:36 ` [PATCH v6] " Zhongze Liu
2017-03-21 16:44 ` [PATCH v9] " Jan Beulich
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170321164101.19127-1-blackskygg@gmail.com \
--to=blackskygg@gmail.com \
--cc=George.Dunlap@eu.citrix.com \
--cc=andrew.cooper3@citrix.com \
--cc=ian.jackson@eu.citrix.com \
--cc=jbeulich@suse.com \
--cc=sstabellini@kernel.org \
--cc=tim@xen.org \
--cc=wei.liu2@citrix.com \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.