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] get virtualization capabilities

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] [PATCH] get virtualization capabilities
From: Jean Guyader <jean.guyader@xxxxxxxxxxxxx>
Date: Tue, 01 Apr 2008 14:49:07 +0100
Delivery-date: Tue, 01 Apr 2008 06:50:18 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
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/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mozilla-Thunderbird 2.0.0.9 (X11/20080110)
Hi,

Here a patch to get the virtualization capabilities in userland through xm info.

Signed-off-by: Jean Guyader <jean.guyader@xxxxxxxxxxxxx>

--
Jean Guyader
diff -r ed67f68ae2a7 tools/python/xen/lowlevel/xc/xc.c
--- a/tools/python/xen/lowlevel/xc/xc.c Thu Mar 27 09:12:09 2008 +0000
+++ b/tools/python/xen/lowlevel/xc/xc.c Tue Apr 01 14:43:34 2008 +0100
@@ -767,6 +767,8 @@ static PyObject *pyxc_physinfo(XcObject 
     uint64_t free_heap;
     PyObject *ret_obj, *node_to_cpu_obj, *node_to_memory_obj;
     xc_cpu_to_node_t map[MAX_CPU_ID + 1];
+    char virt_cap[128], *p_virt=virt_cap;
+    const char *virt_capsname[] = {"hvm", "iommu"};
 
     set_xen_guest_handle(info.cpu_to_node, map);
     info.max_cpu_id = MAX_CPU_ID;
@@ -784,7 +786,14 @@ static PyObject *pyxc_physinfo(XcObject 
     if ( q > cpu_cap )
         *(q-1) = 0;
 
-    ret_obj = Py_BuildValue("{s:i,s:i,s:i,s:i,s:i,s:l,s:l,s:l,s:i,s:s}",
+    *p_virt = 0;
+    for ( i = 0; i < 2; i++ )
+        if ((info.virt_cap >> i) & 1)
+          p_virt += sprintf(p_virt, "%s ", virt_capsname[i]);
+    if (p_virt != virt_cap)
+      *(p_virt - 1) = 0;
+
+    ret_obj = Py_BuildValue("{s:i,s:i,s:i,s:i,s:i,s:l,s:l,s:l,s:i,s:s:s:s}",
                             "nr_nodes",         info.nr_nodes,
                             "max_cpu_id",       info.max_cpu_id,
                             "threads_per_core", info.threads_per_core,
@@ -794,7 +803,8 @@ static PyObject *pyxc_physinfo(XcObject 
                             "free_memory",      pages_to_kib(info.free_pages),
                             "scrub_memory",     pages_to_kib(info.scrub_pages),
                             "cpu_khz",          info.cpu_khz,
-                            "hw_caps",          cpu_cap);
+                            "hw_caps",          cpu_cap,
+                            "virt_caps",        virt_cap);
 
     max_cpu_id = info.max_cpu_id;
     if ( max_cpu_id > MAX_CPU_ID )
diff -r ed67f68ae2a7 tools/python/xen/xend/XendNode.py
--- a/tools/python/xen/xend/XendNode.py Thu Mar 27 09:12:09 2008 +0000
+++ b/tools/python/xen/xend/XendNode.py Tue Apr 01 14:43:34 2008 +0100
@@ -92,6 +92,7 @@ class XendNode:
         physinfo = self.physinfo_dict()
         cpu_count = physinfo['nr_cpus']
         cpu_features = physinfo['hw_caps']
+        virt_caps = physinfo['virt_caps']
 
         # If the number of CPUs don't match, we should just reinitialise 
         # the CPU UUIDs.
@@ -112,6 +113,7 @@ class XendNode:
                 self.cpus[u].update(
                     { 'host'     : self.uuid,
                       'features' : cpu_features,
+                      'virt_caps': virt_caps,
                       'speed'    : int(float(cpuinfo[number]['cpu MHz'])),
                       'vendor'   : cpuinfo[number]['vendor_id'],
                       'modelname': cpuinfo[number]['model name'],
@@ -605,6 +607,7 @@ class XendNode:
                       'threads_per_core',
                       'cpu_mhz',
                       'hw_caps',
+                      'virt_caps',
                       'total_memory',
                       'free_memory',
                       'node_to_cpu',
diff -r ed67f68ae2a7 xen/arch/x86/sysctl.c
--- a/xen/arch/x86/sysctl.c     Thu Mar 27 09:12:09 2008 +0000
+++ b/xen/arch/x86/sysctl.c     Tue Apr 01 14:43:34 2008 +0100
@@ -29,6 +29,8 @@
 
 #define get_xen_guest_handle(val, hnd)  do { val = (hnd).p; } while (0)
 
+extern int hvm_enabled;
+
 long arch_do_sysctl(
     struct xen_sysctl *sysctl, XEN_GUEST_HANDLE(xen_sysctl_t) u_sysctl)
 {
@@ -59,6 +61,8 @@ long arch_do_sysctl(
         pi->cpu_khz          = cpu_khz;
         memset(pi->hw_cap, 0, sizeof(pi->hw_cap));
         memcpy(pi->hw_cap, boot_cpu_data.x86_capability, NCAPINTS*4);
+        pi->virt_cap         = hvm_enabled << XEN_SYSCTL_PHYSINFO_HVM_ENABLED;
+        pi->virt_cap        |= iommu_enabled << 
XEN_SYSCTL_PHYSINFO_IOMMU_ENABLED;
 
         max_array_ent = pi->max_cpu_id;
         pi->max_cpu_id = last_cpu(cpu_online_map);
diff -r ed67f68ae2a7 xen/include/public/sysctl.h
--- a/xen/include/public/sysctl.h       Thu Mar 27 09:12:09 2008 +0000
+++ b/xen/include/public/sysctl.h       Tue Apr 01 14:43:34 2008 +0100
@@ -35,6 +35,9 @@
 #include "domctl.h"
 
 #define XEN_SYSCTL_INTERFACE_VERSION 0x00000006
+
+#define XEN_SYSCTL_PHYSINFO_HVM_ENABLED         0
+#define XEN_SYSCTL_PHYSINFO_IOMMU_ENABLED       1
 
 /*
  * Read console content from Xen buffer ring.
@@ -95,6 +98,12 @@ struct xen_sysctl_physinfo {
     uint64_aligned_t free_pages;
     uint64_aligned_t scrub_pages;
     uint32_t hw_cap[8];
+    /*
+    ** Flags to get the different vt processor features
+    ** virt_cap:0 -> hvm enable
+    ** virt_cap:1 -> iommu enable
+    */
+    uint32_t virt_cap;
 
     /* IN/OUT variables. */
     /*
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-devel] [PATCH] get virtualization capabilities, Jean Guyader <=