WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] [PATCH 3 of 3] [xen-detect] Add arguments to print out only

To: xen-devel@xxxxxxxxxxxxxxxxxxx, keir.fraser@xxxxxxxxxxxxx
Subject: [Xen-devel] [PATCH 3 of 3] [xen-detect] Add arguments to print out only outputs we are interested in
From: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
Date: Tue, 22 Dec 2009 16:48:58 -0000
Cc: konrad.wilk@xxxxxxxxxx
Delivery-date: Tue, 22 Dec 2009 11:26:11 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <patchbomb.1261500535@xxxxxxxxxxxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <patchbomb.1261500535@xxxxxxxxxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mercurial-patchbomb/1.3
# 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