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] build cpumap from list of ints

* Keir Fraser <Keir.Fraser@xxxxxxxxxxxx> [2005-10-21 10:00]:
> 
> On 21 Oct 2005, at 15:03, Ryan Harper wrote:
> 
> >I'm not sure what to do about the python binding in pincpu.  As you
> >mentioned, python2.2 doesn't support 'K' (unsigned long long), but it
> >can support 'L' (long long).
> 
> The usage examples you posted look fine to me.
> 
> As for pincpu: I think it should accept a list of integers and turn 
> that into a cpumap_t (i.e., do the reverse operation of what we do in 
> vcpu_getinfo).
> 
> Then python code does not see cpumap bitmaps at all. Just lists of 
> integers.

This patch removes the assembly of the cpumap_t from python.  xm/xend
only pass around a list of ints, or a string representation of the list
as xc_domain_pincpu now constructs the cpumap from the list if it is
passed.

-- 
Ryan Harper
Software Engineer; Linux Technology Center
IBM Corp., Austin, Tx
(512) 838-9253   T/L: 678-9253
ryanh@xxxxxxxxxx


diffstat output:
 lowlevel/xc/xc.c         |   19 ++++++++++++++-----
 xend/XendClient.py       |    2 +-
 xend/XendDomain.py       |    9 ++++++---
 xend/server/SrvDomain.py |    2 +-
 xm/main.py               |    6 +-----
 5 files changed, 23 insertions(+), 15 deletions(-)

Signed-off-by: Ryan Harper <ryanh@xxxxxxxxxx>
---
diff -r 3fea5df6d4cd tools/python/xen/lowlevel/xc/xc.c
--- a/tools/python/xen/lowlevel/xc/xc.c Fri Oct 21 15:03:28 2005
+++ b/tools/python/xen/lowlevel/xc/xc.c Fri Oct 21 11:55:55 2005
@@ -204,14 +204,23 @@
     XcObject *xc = (XcObject *)self;
 
     uint32_t dom;
-    int vcpu = 0;
+    int vcpu = 0, i;
     cpumap_t cpumap = ~0ULL;
+    PyObject *list;
 
     static char *kwd_list[] = { "dom", "vcpu", "cpumap", NULL };
 
-    if ( !PyArg_ParseTupleAndKeywords(args, kwds, "i|il", kwd_list, 
-                                      &dom, &vcpu, &cpumap) )
-        return NULL;
+    if ( !PyArg_ParseTupleAndKeywords(args, kwds, "i|iO", kwd_list, 
+                                      &dom, &vcpu, &list) )
+        return NULL;
+
+    /* see if a list was passed  */
+    if(PyList_Check(list)) {
+        /* clear the map for building the value from list */
+        cpumap = 0ULL;
+        for ( i = 0; i < PyList_Size(list); i++ ) 
+            cpumap |= (cpumap_t)(1 << PyInt_AsLong(PyList_GetItem(list, i)));
+    } 
 
     if ( xc_domain_pincpu(xc->xc_handle, dom, vcpu, cpumap) != 0 )
         return PyErr_SetFromErrno(xc_error);
@@ -900,7 +909,7 @@
       "Pin a VCPU to a specified set CPUs.\n"
       " dom [int]:     Identifier of domain to which VCPU belongs.\n"
       " vcpu [int, 0]: VCPU being pinned.\n"
-      " cpumap [int, -1]: Bitmap of usable CPUs.\n\n"
+      " cpumap [list, []]: list of usable CPUs.\n\n"
       "Returns: [int] 0 on success; -1 on error.\n" },
 
     { "domain_setcpuweight", 
diff -r 3fea5df6d4cd tools/python/xen/xend/XendClient.py
--- a/tools/python/xen/xend/XendClient.py       Fri Oct 21 15:03:28 2005
+++ b/tools/python/xen/xend/XendClient.py       Fri Oct 21 11:55:55 2005
@@ -258,7 +258,7 @@
         return self.xendPost(self.domainurl(id),
                              {'op'      : 'pincpu',
                               'vcpu'    : vcpu,
-                              'cpumap'  : cpumap })
+                              'cpumap'  : str(cpumap) })
 
     def xend_domain_cpu_bvt_set(self, id, mcuadv, warpback, warpvalue, warpl, 
warpu):
         return self.xendPost(self.domainurl(id),
diff -r 3fea5df6d4cd tools/python/xen/xend/XendDomain.py
--- a/tools/python/xen/xend/XendDomain.py       Fri Oct 21 15:03:28 2005
+++ b/tools/python/xen/xend/XendDomain.py       Fri Oct 21 11:55:55 2005
@@ -412,9 +412,12 @@
     def domain_pincpu(self, domid, vcpu, cpumap):
         """Set which cpus vcpu can use
 
-        @param cpumap:  bitmap of usable cpus
-        """
-        dominfo = self.domain_lookup(domid)
+        @param cpumap:  string repr of list of usable cpus
+        """
+        dominfo = self.domain_lookup(domid)
+        # convert cpumap string into a list of ints
+        cpumap = map(lambda x: int(x),
+                     cpumap.replace("[", "").replace("]", "").split(","))
         try:
             return xc.domain_pincpu(dominfo.getDomid(), vcpu, cpumap)
         except Exception, ex:
diff -r 3fea5df6d4cd tools/python/xen/xend/server/SrvDomain.py
--- a/tools/python/xen/xend/server/SrvDomain.py Fri Oct 21 15:03:28 2005
+++ b/tools/python/xen/xend/server/SrvDomain.py Fri Oct 21 11:55:55 2005
@@ -89,7 +89,7 @@
         fn = FormFn(self.xd.domain_pincpu,
                     [['dom', 'int'],
                      ['vcpu', 'int'],
-                     ['cpumap', 'int']])
+                     ['cpumap', 'str']])
         val = fn(req.args, {'dom': self.dom.domid})
         return val
 
diff -r 3fea5df6d4cd tools/python/xen/xm/main.py
--- a/tools/python/xen/xm/main.py       Fri Oct 21 15:03:28 2005
+++ b/tools/python/xen/xm/main.py       Fri Oct 21 11:55:55 2005
@@ -411,7 +411,6 @@
 
 def cpu_make_map(cpulist):
     cpus = []
-    cpumap = 0
     for c in cpulist.split(','):
         if c.find('-') != -1:
             (x,y) = c.split('-')
@@ -420,10 +419,7 @@
         else:
             cpus.append(int(c))
     cpus.sort()
-    for c in cpus:
-        cpumap = cpumap | 1<<c
-
-    return cpumap
+    return cpus
 
 def xm_vcpu_pin(args):
     arg_check(args, 3, "vcpu-pin")

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel