[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [Patch][resend] implementation of cpupool support in xl



On Wed, 2010-09-15 at 10:37 +0100, Ian Campbell wrote:
> On Wed, 2010-09-15 at 10:23 +0100, Juergen Gross wrote:
> > 
> > And I'm not sure I'll get the generating of the bindings correctly.
> > So yes, please do it! 
> 
> Will do.
> 
> >From looking at your patch it seems that the intention is that the size
> is the number of bytes in the map, rather than the number of CPUs which
> can be represented or the number of uint64_t's, is that right and/or
> what you would like to use?

Seems like libxc counts bytes but libxl (with your patch) counts 64 bit
words.

There doesn't seem to be any users of the size currently so I went with
bytes in the below (compile tested + examined generated code only) but
since your patch adds the first actual user feel free to change it if
that makes the libxl interface more suitable for your needs or whatever.

Ian.

diff -r 098790dd9327 tools/libxl/libxl.c
--- a/tools/libxl/libxl.c       Thu Sep 09 17:59:33 2010 +0100
+++ b/tools/libxl/libxl.c       Wed Sep 15 11:19:35 2010 +0100
@@ -2924,8 +2924,9 @@ libxl_vcpuinfo *libxl_list_vcpu(libxl_ct
 
     num_cpuwords = ((physinfo.max_cpu_id + 64) / 64);
     for (*nb_vcpu = 0; *nb_vcpu <= domaininfo.max_vcpu_id; ++*nb_vcpu, ++ptr) {
-        ptr->cpumap = malloc(num_cpuwords * sizeof(*ptr->cpumap));
-        if (!ptr->cpumap) {
+        ptr->cpumap.size = num_cpuwords * sizeof(*ptr->cpumap.map);
+        ptr->cpumap.map = malloc(ptr->cpumap.size);
+        if (!ptr->cpumap.map) {
             return NULL;
         }
         if (xc_vcpu_getinfo(ctx->xch, domid, *nb_vcpu, &vcpuinfo) == -1) {
@@ -2933,7 +2934,7 @@ libxl_vcpuinfo *libxl_list_vcpu(libxl_ct
             return NULL;
         }
         if (xc_vcpu_getaffinity(ctx->xch, domid, *nb_vcpu,
-            ptr->cpumap, ((*nrcpus) + 7) / 8) == -1) {
+            ptr->cpumap.map, ((*nrcpus) + 7) / 8) == -1) {
             LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "getting vcpu affinity");
             return NULL;
         }
diff -r 098790dd9327 tools/libxl/libxl.h
--- a/tools/libxl/libxl.h       Thu Sep 09 17:59:33 2010 +0100
+++ b/tools/libxl/libxl.h       Wed Sep 15 11:19:35 2010 +0100
@@ -138,8 +138,6 @@ typedef char **libxl_string_list;
 typedef char **libxl_string_list;
 
 typedef char **libxl_key_value_list;
-
-typedef uint64_t *libxl_cpumap;
 
 typedef uint32_t libxl_hwcap[8];
 
diff -r 098790dd9327 tools/libxl/libxl.idl
--- a/tools/libxl/libxl.idl     Thu Sep 09 17:59:33 2010 +0100
+++ b/tools/libxl/libxl.idl     Wed Sep 15 11:19:35 2010 +0100
@@ -14,8 +14,6 @@ libxl_nic_type = Builtin("nic_type")
 
 libxl_string_list = Builtin("string_list", 
destructor_fn="libxl_string_list_destroy", passby=PASS_BY_REFERENCE)
 libxl_key_value_list = Builtin("key_value_list", 
destructor_fn="libxl_key_value_list_destroy", passby=PASS_BY_REFERENCE)
-
-libxl_cpumap = Builtin("cpumap", destructor_fn="free")
 
 libxl_hwcap = Builtin("hwcap")
 
@@ -42,6 +40,11 @@ SHUTDOWN_* constant."""),
     ("vcpu_online", uint32),
     ], destructor_fn=None)
 
+libxl_cpumap = Struct("cpumap", [
+    ("size", uint32),
+    ("map",  Reference(uint64)),
+    ])
+                      
 libxl_poolinfo = Struct("poolinfo", [
     ("poolid", uint32)
     ], destructor_fn=None)
diff -r 098790dd9327 tools/libxl/libxltypes.py
--- a/tools/libxl/libxltypes.py Thu Sep 09 17:59:33 2010 +0100
+++ b/tools/libxl/libxltypes.py Wed Sep 15 11:19:35 2010 +0100
@@ -119,7 +119,10 @@ class Reference(Type):
         kwargs.setdefault('passby', PASS_BY_VALUE)
         
         kwargs.setdefault('namespace', ty.namespace)
-        typename = ty.typename[len(kwargs['namespace']):]
+
+        typename = ty.typename
+        if ty.namespace:
+            typename = typename[len(kwargs['namespace']):]
         Type.__init__(self, typename + " *", **kwargs)
 
 #
diff -r 098790dd9327 tools/libxl/xl_cmdimpl.c
--- a/tools/libxl/xl_cmdimpl.c  Thu Sep 09 17:59:33 2010 +0100
+++ b/tools/libxl/xl_cmdimpl.c  Wed Sep 15 11:19:35 2010 +0100
@@ -3289,7 +3289,7 @@ static void print_vcpuinfo(uint32_t tdom
     printf("%9.1f  ", ((float)vcpuinfo->vcpu_time / 1e9));
     /* CPU AFFINITY */
     pcpumap = nr_cpus > 64 ? (uint64_t)-1 : ((1ULL << nr_cpus) - 1);
-    for (cpumap = vcpuinfo->cpumap; nr_cpus; ++cpumap) {
+    for (cpumap = vcpuinfo->cpumap.map; nr_cpus; ++cpumap) {
         if (*cpumap < pcpumap) {
             break;
         }
@@ -3304,7 +3304,7 @@ static void print_vcpuinfo(uint32_t tdom
     if (!nr_cpus) {
         printf("any cpu\n");
     } else {
-        for (cpumap = vcpuinfo->cpumap; nr_cpus; ++cpumap) {
+        for (cpumap = vcpuinfo->cpumap.map; nr_cpus; ++cpumap) {
             pcpumap = *cpumap;
             for (i = 0; !(pcpumap & 1); ++i, pcpumap >>= 1)
                 ;



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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.