|
[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 |