# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1245316845 -3600
# Node ID 407e2e7dca5b1b3f528959246b1efbd4e243c119
# Parent c0d2838fc10f8bb0b004cee3fe7e2b41ff4e2f0e
Allow tools to see the hypervisor command line.
This is useful from tools in the same way /proc/cmdline is useful for
the domain 0 kernel.
Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
---
tools/python/xen/lowlevel/xc/xc.c | 7 ++++++-
tools/python/xen/xend/XendNode.py | 5 ++++-
tools/python/xen/xm/main.py | 1 +
xen/common/compat/kernel.c | 2 ++
xen/common/kernel.c | 13 ++++++++++++-
xen/include/public/version.h | 3 +++
6 files changed, 28 insertions(+), 3 deletions(-)
diff -r c0d2838fc10f -r 407e2e7dca5b tools/python/xen/lowlevel/xc/xc.c
--- a/tools/python/xen/lowlevel/xc/xc.c Thu Jun 18 10:20:17 2009 +0100
+++ b/tools/python/xen/lowlevel/xc/xc.c Thu Jun 18 10:20:45 2009 +0100
@@ -1132,6 +1132,7 @@ static PyObject *pyxc_xeninfo(XcObject *
xen_changeset_info_t xen_chgset;
xen_capabilities_info_t xen_caps;
xen_platform_parameters_t p_parms;
+ xen_commandline_t xen_commandline;
long xen_version;
long xen_pagesize;
char str[128];
@@ -1153,13 +1154,16 @@ static PyObject *pyxc_xeninfo(XcObject *
if ( xc_version(self->xc_handle, XENVER_platform_parameters, &p_parms) !=
0 )
return pyxc_error_to_exception();
+ if ( xc_version(self->xc_handle, XENVER_commandline, &xen_commandline) !=
0 )
+ return pyxc_error_to_exception();
+
snprintf(str, sizeof(str), "virt_start=0x%lx", p_parms.virt_start);
xen_pagesize = xc_version(self->xc_handle, XENVER_pagesize, NULL);
if (xen_pagesize < 0 )
return pyxc_error_to_exception();
- return Py_BuildValue("{s:i,s:i,s:s,s:s,s:i,s:s,s:s,s:s,s:s,s:s,s:s}",
+ return Py_BuildValue("{s:i,s:i,s:s,s:s,s:i,s:s,s:s,s:s,s:s,s:s,s:s,s:s}",
"xen_major", xen_version >> 16,
"xen_minor", (xen_version & 0xffff),
"xen_extra", xen_extra,
@@ -1167,6 +1171,7 @@ static PyObject *pyxc_xeninfo(XcObject *
"xen_pagesize", xen_pagesize,
"platform_params", str,
"xen_changeset", xen_chgset,
+ "xen_commandline", xen_commandline,
"cc_compiler", xen_cc.compiler,
"cc_compile_by", xen_cc.compile_by,
"cc_compile_domain", xen_cc.compile_domain,
diff -r c0d2838fc10f -r 407e2e7dca5b tools/python/xen/xend/XendNode.py
--- a/tools/python/xen/xend/XendNode.py Thu Jun 18 10:20:17 2009 +0100
+++ b/tools/python/xen/xend/XendNode.py Thu Jun 18 10:20:45 2009 +0100
@@ -91,6 +91,7 @@ class XendNode:
# is directly exposed via XenAPI
self.other_config["xen_pagesize"] = self.xeninfo_dict()["xen_pagesize"]
self.other_config["platform_params"] =
self.xeninfo_dict()["platform_params"]
+ self.other_config["xen_commandline"] =
self.xeninfo_dict()["xen_commandline"]
# load CPU UUIDs
saved_cpus = self.state_store.load_state('cpu')
@@ -612,7 +613,8 @@ class XendNode:
"cc_compile_by": xeninfo_dict["cc_compile_by"],
"cc_compile_domain": xeninfo_dict["cc_compile_domain"],
"cc_compile_date": xeninfo_dict["cc_compile_date"],
- "xen_changeset": xeninfo_dict["xen_changeset"]
+ "xen_changeset": xeninfo_dict["xen_changeset"],
+ "xen_commandline": xeninfo_dict["xen_commandline"]
})
return info
@@ -888,6 +890,7 @@ class XendNode:
'xen_pagesize',
'platform_params',
'xen_changeset',
+ 'xen_commandline',
'cc_compiler',
'cc_compile_by',
'cc_compile_domain',
diff -r c0d2838fc10f -r 407e2e7dca5b tools/python/xen/xm/main.py
--- a/tools/python/xen/xm/main.py Thu Jun 18 10:20:17 2009 +0100
+++ b/tools/python/xen/xm/main.py Thu Jun 18 10:20:45 2009 +0100
@@ -1757,6 +1757,7 @@ def xm_info(args):
"xen_scheduler": getVal(["sched_policy"]),
"xen_pagesize": getVal(["other_config", "xen_pagesize"]),
"platform_params": getVal(["other_config", "platform_params"]),
+ "xen_commandline": getVal(["other_config", "xen_commandline"]),
"xen_changeset": getVal(["software_version", "xen_changeset"]),
"cc_compiler": getVal(["software_version", "cc_compiler"]),
"cc_compile_by": getVal(["software_version", "cc_compile_by"]),
diff -r c0d2838fc10f -r 407e2e7dca5b xen/common/compat/kernel.c
--- a/xen/common/compat/kernel.c Thu Jun 18 10:20:17 2009 +0100
+++ b/xen/common/compat/kernel.c Thu Jun 18 10:20:45 2009 +0100
@@ -14,6 +14,8 @@
#include <compat/xen.h>
#include <compat/nmi.h>
#include <compat/version.h>
+
+extern xen_commandline_t saved_cmdline;
#define xen_extraversion compat_extraversion
#define xen_extraversion_t compat_extraversion_t
diff -r c0d2838fc10f -r 407e2e7dca5b xen/common/kernel.c
--- a/xen/common/kernel.c Thu Jun 18 10:20:17 2009 +0100
+++ b/xen/common/kernel.c Thu Jun 18 10:20:45 2009 +0100
@@ -24,12 +24,16 @@
int tainted;
+xen_commandline_t saved_cmdline;
+
void cmdline_parse(char *cmdline)
{
char opt[100], *optval, *optkey, *q;
const char *p = cmdline;
struct kernel_param *param;
int bool_assert;
+
+ safe_strcpy(saved_cmdline, cmdline);
if ( p == NULL )
return;
@@ -246,7 +250,14 @@ DO(xen_version)(int cmd, XEN_GUEST_HANDL
ARRAY_SIZE(current->domain->handle)) )
return -EFAULT;
return 0;
- }
+ }
+
+ case XENVER_commandline:
+ {
+ if ( copy_to_guest(arg, saved_cmdline, ARRAY_SIZE(saved_cmdline)) )
+ return -EFAULT;
+ return 0;
+ }
}
return -ENOSYS;
diff -r c0d2838fc10f -r 407e2e7dca5b xen/include/public/version.h
--- a/xen/include/public/version.h Thu Jun 18 10:20:17 2009 +0100
+++ b/xen/include/public/version.h Thu Jun 18 10:20:45 2009 +0100
@@ -78,6 +78,9 @@ typedef struct xen_feature_info xen_feat
/* arg == xen_domain_handle_t. */
#define XENVER_guest_handle 8
+#define XENVER_commandline 9
+typedef char xen_commandline_t[1024];
+
#endif /* __XEN_PUBLIC_VERSION_H__ */
/*
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|