# HG changeset patch
# User konrad@xxxxxxxxxxxxxxxxxxx
# Date 1261498156 18000
# Node ID 04c067941b17bdc679ffdc2f6c81f8e2f78e9cc5
# Parent 7bd805a543da685a3dba7b8b0c4e3e7052c863b3
[xen-detect] Add arguments to print out only outputs we are interested in.
This is quite usefull in scripts where you can do
if xen-detect -P || modprobe xen-<some module>
And do not have to parse the output - instead you will get
the output only if the condition exists.
diff -r 7bd805a543da -r 04c067941b17 tools/misc/xen-detect.c
--- a/tools/misc/xen-detect.c Mon Dec 21 18:51:43 2009 -0500
+++ b/tools/misc/xen-detect.c Tue Dec 22 11:09:16 2009 -0500
@@ -29,6 +29,12 @@
#include <string.h>
#include <setjmp.h>
#include <signal.h>
+#include <unistd.h>
+
+/* Which outputs should be displayed. */
+int disp_HVM = 1;
+int disp_PV = 1;
+int disp_NOXEN = 1;
static void cpuid(uint32_t idx,
uint32_t *eax,
@@ -66,8 +72,9 @@
found:
cpuid(base + 1, &eax, &ebx, &ecx, &edx, pv_context);
- printf("Running in %s context on Xen v%d.%d.\n",
- pv_context ? "PV" : "HVM", (uint16_t)(eax >> 16), (uint16_t)eax);
+ if ((pv_context && disp_PV) || (!pv_context && disp_HVM))
+ printf("Running in %s context on Xen v%d.%d.\n",
+ pv_context ? "PV" : "HVM", (uint16_t)(eax >> 16),
(uint16_t)eax);
return pv_context ? 1 : 2;
}
@@ -78,10 +85,42 @@
longjmp(sigill_jmp, 1);
}
-int main(void)
+static void usage(void)
+{
+ printf("usage:\n\n");
+ printf(" xen_detect [options]\n\n");
+ printf("options:\n");
+ printf(" -P, print output if running in PV context.\n");
+ printf(" -H, print output if running in HVM context.\n");
+ printf(" -N, print output if not running in any Xen context.\n");
+};
+
+int main(int argc, char **argv)
{
/* 0 - no Xen, 1 - PV Xen, 2 - HVM Xen */
int rc = 0;
+ int ch;
+
+ while ((ch = getopt(argc, argv, "PHN?h")) != -1 ) {
+ switch (ch) {
+ case 'h':
+ case '?':
+ usage();
+ return(-1);
+ case 'H':
+ disp_HVM = 1;
+ disp_PV = disp_NOXEN = 0;
+ break;
+ case 'P':
+ disp_PV = 1;
+ disp_HVM = disp_NOXEN = 0;
+ break;
+ case 'N':
+ disp_NOXEN = 1;
+ disp_PV = disp_HVM = 0;
+ break;
+ }
+ }
/* Check for execution in HVM context. */
if ( (rc = check_for_xen(0)) )
@@ -97,6 +136,7 @@
&& (rc = check_for_xen(1)) )
return rc;
- printf("Not running on Xen.\n");
+ if (disp_NOXEN)
+ printf("Not running on Xen.\n");
return 0;
}
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|