aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>2005-06-19 17:05:55 +0000
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>2005-06-19 17:05:55 +0000
commit6b76d296bbfad35e3cea2f6073820e1dc9d8a8e7 (patch)
tree2478042d274dbe5dbceac6693b0a42395eb0a8bf
parent6c25db681a02db8f7aa77668461301aba4be6f9d (diff)
downloadxen-6b76d296bbfad35e3cea2f6073820e1dc9d8a8e7.tar.gz
xen-6b76d296bbfad35e3cea2f6073820e1dc9d8a8e7.tar.bz2
xen-6b76d296bbfad35e3cea2f6073820e1dc9d8a8e7.zip
bitkeeper revision 1.1718.1.6 (42b5a5f3otSuOxDZ6KTFKrxR1U1m4Q)
Extend the xen_version hypercall to return extraversion and compile info. Signed-off-by: Nguyen Anh Quynh <aquynh@gmail.com> Signed-off-by: Keir Fraser <keir@xensource.com>
-rw-r--r--.rootkeys1
-rw-r--r--xen/common/kernel.c41
-rw-r--r--xen/include/public/version.h30
-rw-r--r--xen/include/xen/string.h5
4 files changed, 69 insertions, 8 deletions
diff --git a/.rootkeys b/.rootkeys
index cf29782b84..338b1be862 100644
--- a/.rootkeys
+++ b/.rootkeys
@@ -1504,6 +1504,7 @@
4051db79512nOCGweabrFWO2M2h5ng xen/include/public/physdev.h
40589968wmhPmV5-ENbBYmMjnedgKw xen/include/public/sched_ctl.h
404f3d2eR2Owk-ZcGOx9ULGHg3nrww xen/include/public/trace.h
+42b5a5f2QC1IxeuwCwwsOEhvcJ2BJg xen/include/public/version.h
4266bd01Ul-pC01ZVvBkhBnv5eqzvw xen/include/public/vmx_assist.h
3ddb79c25UE59iu4JJcbRalx95mvcg xen/include/public/xen.h
3e397e66m2tO3s-J8Jnr7Ws_tGoPTg xen/include/xen/ac_timer.h
diff --git a/xen/common/kernel.c b/xen/common/kernel.c
index 3acaac8e1b..d63c235248 100644
--- a/xen/common/kernel.c
+++ b/xen/common/kernel.c
@@ -1,10 +1,7 @@
/******************************************************************************
* kernel.c
*
- * This file should contain architecture-independent bootstrap and low-level
- * help routines. It's a bit x86/PC specific right now!
- *
- * Copyright (c) 2002-2003 K A Fraser
+ * Copyright (c) 2002-2005 K A Fraser
*/
#include <xen/config.h>
@@ -14,6 +11,7 @@
#include <xen/compile.h>
#include <xen/sched.h>
#include <asm/current.h>
+#include <public/version.h>
void cmdline_parse(char *cmdline)
{
@@ -83,11 +81,38 @@ void cmdline_parse(char *cmdline)
* Simple hypercalls.
*/
-long do_xen_version(int cmd)
+long do_xen_version(int cmd, void *arg)
{
- if ( cmd != 0 )
- return -ENOSYS;
- return (XEN_VERSION<<16) | (XEN_SUBVERSION);
+ switch ( cmd )
+ {
+ case XENVER_version:
+ {
+ return (XEN_VERSION<<16) | (XEN_SUBVERSION);
+ }
+
+ case XENVER_extraversion:
+ {
+ char extraversion[16];
+ safe_strcpy(extraversion, XEN_EXTRAVERSION);
+ if ( copy_to_user(arg, extraversion, sizeof(extraversion)) )
+ return -EFAULT;
+ return 0;
+ }
+
+ case XENVER_compile_info:
+ {
+ struct xen_compile_info info;
+ safe_strcpy(info.compiler, XEN_COMPILER);
+ safe_strcpy(info.compile_by, XEN_COMPILE_BY);
+ safe_strcpy(info.compile_domain, XEN_COMPILE_DOMAIN);
+ safe_strcpy(info.compile_date, XEN_COMPILE_DATE);
+ if ( copy_to_user(arg, &info, sizeof(info)) )
+ return -EFAULT;
+ return 0;
+ }
+ }
+
+ return -ENOSYS;
}
long do_vm_assist(unsigned int cmd, unsigned int type)
diff --git a/xen/include/public/version.h b/xen/include/public/version.h
new file mode 100644
index 0000000000..1860d061da
--- /dev/null
+++ b/xen/include/public/version.h
@@ -0,0 +1,30 @@
+/******************************************************************************
+ * version.h
+ *
+ * Xen version, type, and compile information.
+ *
+ * Copyright (c) 2005, Nguyen Anh Quynh <aquynh@gmail.com>
+ * Copyright (c) 2005, Keir Fraser <keir@xensource.com>
+ */
+
+#ifndef __XEN_PUBLIC_VERSION_H__
+#define __XEN_PUBLIC_VERSION_H__
+
+/* NB. All ops return zero on success, except XENVER_version. */
+
+/* arg == NULL; returns major:minor (16:16). */
+#define XENVER_version 0
+
+/* arg == 16-char string buffer. */
+#define XENVER_extraversion 1
+
+/* arg == xenversion_compile_info_t. */
+#define XENVER_compile_info 2
+typedef struct xen_compile_info {
+ char compiler[64];
+ char compile_by[16];
+ char compile_domain[32];
+ char compile_date[32];
+} xen_compile_info_t;
+
+#endif /* __XEN_PUBLIC_VERSION_H__ */
diff --git a/xen/include/xen/string.h b/xen/include/xen/string.h
index 384ee2cfce..0c6dd612ad 100644
--- a/xen/include/xen/string.h
+++ b/xen/include/xen/string.h
@@ -81,4 +81,9 @@ extern void * memchr(const void *,int,__kernel_size_t);
}
#endif
+#define safe_strcpy(d,s) \
+do { strncpy((d),(s),sizeof((d))); \
+ (d)[sizeof((d))-1] = '\0'; \
+} while (0)
+
#endif /* _LINUX_STRING_H_ */