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

[Xen-changelog] Store an opaque handle (tools uuid) in the domain structure



# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxx
# Node ID bd3268de41453531bd340463eb7546120a9348c9
# Parent  70aa62954e91ccbfbd80be4aba45a945a7d1b428
Store an opaque handle (tools uuid) in the domain structure
within Xen. Refactor GETVCPUCONTEXT into an op of the same
name plus a new op GETVCPUINFO. Move the cpumap and cpu info
arrays from GETDOMAININFO and move into new GETVCPUINFO.

Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>

diff -r 70aa62954e91 -r bd3268de4145 tools/libxc/xc_core.c
--- a/tools/libxc/xc_core.c     Fri Oct 14 00:42:34 2005
+++ b/tools/libxc/xc_core.c     Fri Oct 14 14:40:48 2005
@@ -33,7 +33,7 @@
     unsigned long nr_pages;
     unsigned long *page_array;
     xc_dominfo_t info;
-    int i, j, vcpu_map_size, dump_fd;
+    int i, j, dump_fd;
     char *dump_mem, *dump_mem_start = NULL;
     struct xc_core_header header;
     vcpu_guest_context_t     ctxt[MAX_VIRT_CPUS];
@@ -54,18 +54,9 @@
         goto error_out;
     }
  
-    vcpu_map_size =  sizeof(info.vcpu_to_cpu) / sizeof(info.vcpu_to_cpu[0]);
-
-    for (i = 0, j = 0; i < vcpu_map_size; i++) {
-        if (info.vcpu_to_cpu[i] == -1) {
-            continue;
-        }
-        if (xc_domain_get_vcpu_context(xc_handle, domid, i, &ctxt[j])) {
-            PERROR("Could not get all vcpu contexts for domain");
-            goto error_out;
-        }
-        j++;
-    }
+    for (i = 0, j = 0; i < 32; i++)
+        if (xc_domain_get_vcpu_context(xc_handle, domid, i, &ctxt[j]) == 0)
+            j++;
  
     nr_pages = info.nr_pages;
 
diff -r 70aa62954e91 -r bd3268de4145 tools/libxc/xc_domain.c
--- a/tools/libxc/xc_domain.c   Fri Oct 14 00:42:34 2005
+++ b/tools/libxc/xc_domain.c   Fri Oct 14 14:40:48 2005
@@ -11,6 +11,7 @@
 
 int xc_domain_create(int xc_handle,
                      uint32_t ssidref,
+                     xen_domain_handle_t handle,
                      uint32_t *pdomid)
 {
     int err;
@@ -19,6 +20,7 @@
     op.cmd = DOM0_CREATEDOMAIN;
     op.u.createdomain.domain = (domid_t)*pdomid;
     op.u.createdomain.ssidref = ssidref;
+    memcpy(op.u.createdomain.handle, handle, sizeof(xen_domain_handle_t));
     if ( (err = do_dom0_op(xc_handle, &op)) != 0 )
         return err;
 
@@ -59,7 +61,7 @@
 int xc_domain_pincpu(int xc_handle,
                      uint32_t domid, 
                      int vcpu,
-                     cpumap_t *cpumap)
+                     cpumap_t cpumap)
 {
     dom0_op_t op;
     op.cmd = DOM0_PINCPUDOMAIN;
@@ -112,10 +114,9 @@
         info->shared_info_frame = op.u.getdomaininfo.shared_info_frame;
         info->cpu_time = op.u.getdomaininfo.cpu_time;
         info->vcpus = op.u.getdomaininfo.n_vcpu;
-        memcpy(&info->vcpu_to_cpu, &op.u.getdomaininfo.vcpu_to_cpu, 
-               sizeof(info->vcpu_to_cpu));
-        memcpy(&info->cpumap, &op.u.getdomaininfo.cpumap, 
-               sizeof(info->cpumap));
+
+        memcpy(info->handle, op.u.getdomaininfo.handle,
+               sizeof(xen_domain_handle_t));
 
         next_domid = (uint16_t)op.u.getdomaininfo.domain + 1;
         info++;
@@ -166,19 +167,14 @@
     op.u.getvcpucontext.vcpu   = (uint16_t)vcpu;
     op.u.getvcpucontext.ctxt   = ctxt;
 
-    if ( (ctxt != NULL) &&
-         ((rc = mlock(ctxt, sizeof(*ctxt))) != 0) )
+    if ( (rc = mlock(ctxt, sizeof(*ctxt))) != 0 )
         return rc;
 
     rc = do_dom0_op(xc_handle, &op);
 
-    if ( ctxt != NULL )
-        safe_munlock(ctxt, sizeof(*ctxt));
-
-    if ( rc > 0 )
-        return -ESRCH;
-    else
-        return rc;
+    safe_munlock(ctxt, sizeof(*ctxt));
+
+    return rc;
 }
 
 
diff -r 70aa62954e91 -r bd3268de4145 tools/libxc/xc_private.c
--- a/tools/libxc/xc_private.c  Fri Oct 14 00:42:34 2005
+++ b/tools/libxc/xc_private.c  Fri Oct 14 14:40:48 2005
@@ -256,16 +256,15 @@
 {
     dom0_op_t op;
 
-    op.cmd = DOM0_GETVCPUCONTEXT;
-    op.u.getvcpucontext.domain = (domid_t)domid;
-    op.u.getvcpucontext.vcpu   = (uint16_t)vcpu;
-    op.u.getvcpucontext.ctxt   = NULL;
+    op.cmd = DOM0_GETVCPUINFO;
+    op.u.getvcpuinfo.domain = (domid_t)domid;
+    op.u.getvcpuinfo.vcpu   = (uint16_t)vcpu;
     if ( (do_dom0_op(xc_handle, &op) < 0) )
     {
         PERROR("Could not get info on domain");
         return -1;
     }
-    return op.u.getvcpucontext.cpu_time;
+    return op.u.getvcpuinfo.cpu_time;
 }
 
 
diff -r 70aa62954e91 -r bd3268de4145 tools/libxc/xenctrl.h
--- a/tools/libxc/xenctrl.h     Fri Oct 14 00:42:34 2005
+++ b/tools/libxc/xenctrl.h     Fri Oct 14 14:40:48 2005
@@ -123,23 +123,23 @@
  */
 
 typedef struct {
-    uint32_t           domid;
-    uint32_t           ssidref;
+    uint32_t      domid;
+    uint32_t      ssidref;
     unsigned int  dying:1, crashed:1, shutdown:1, 
                   paused:1, blocked:1, running:1;
     unsigned int  shutdown_reason; /* only meaningful if shutdown==1 */
     unsigned long nr_pages;
     unsigned long shared_info_frame;
-    uint64_t           cpu_time;
+    uint64_t      cpu_time;
     unsigned long max_memkb;
     unsigned int  vcpus;
-    int32_t           vcpu_to_cpu[MAX_VIRT_CPUS];
-    cpumap_t      cpumap[MAX_VIRT_CPUS];
+    xen_domain_handle_t handle;
 } xc_dominfo_t;
 
 typedef dom0_getdomaininfo_t xc_domaininfo_t;
 int xc_domain_create(int xc_handle, 
                      uint32_t ssidref,
+                     xen_domain_handle_t handle,
                      uint32_t *pdomid);
 
 
@@ -194,7 +194,8 @@
 int xc_domain_pincpu(int xc_handle,
                      uint32_t domid,
                      int vcpu,
-                     cpumap_t *cpumap);
+                     cpumap_t cpumap);
+
 /**
  * This function will return information about one or more domains. It is
  * designed to iterate over the list of domains. If a single domain is
diff -r 70aa62954e91 -r bd3268de4145 tools/python/xen/lowlevel/xc/xc.c
--- a/tools/python/xen/lowlevel/xc/xc.c Fri Oct 14 00:42:34 2005
+++ b/tools/python/xen/lowlevel/xc/xc.c Fri Oct 14 14:40:48 2005
@@ -77,17 +77,41 @@
 {
     XcObject *xc = (XcObject *)self;
 
-    uint32_t          dom = 0;
-    int          ret;
-    uint32_t          ssidref = 0x0;
-
-    static char *kwd_list[] = { "dom", "ssidref", NULL };
-
-    if ( !PyArg_ParseTupleAndKeywords(args, kwds, "|ii", kwd_list,
-                                      &dom, &ssidref))
-        return NULL;
-
-    if ( (ret = xc_domain_create(xc->xc_handle, ssidref, &dom)) < 0 )
+    uint32_t dom = 0;
+    int      ret, i;
+    uint32_t ssidref = 0;
+    PyObject *pyhandle = NULL;
+    xen_domain_handle_t handle = { 
+        0xde, 0xad, 0xbe, 0xef, 0xde, 0xad, 0xbe, 0xef,
+        0xde, 0xad, 0xbe, 0xef, 0xde, 0xad, 0xbe, 0xef };
+
+    static char *kwd_list[] = { "dom", "ssidref", "handle", NULL };
+
+    if ( !PyArg_ParseTupleAndKeywords(args, kwds, "|iiO", kwd_list,
+                                      &dom, &ssidref, &pyhandle))
+        return NULL;
+
+    if ( pyhandle != NULL )
+    {
+        if ( !PyList_Check(pyhandle) || 
+             (PyList_Size(pyhandle) != sizeof(xen_domain_handle_t)) )
+        {
+        out_exception:
+            errno = EINVAL;
+            PyErr_SetFromErrno(xc_error);
+            return NULL;
+        }
+
+        for ( i = 0; i < sizeof(xen_domain_handle_t); i++ )
+        {
+            PyObject *p = PyList_GetItem(pyhandle, i);
+            if ( !PyInt_Check(p) )
+                goto out_exception;
+            handle[i] = (uint8_t)PyInt_AsLong(p);
+        }
+    }
+
+    if ( (ret = xc_domain_create(xc->xc_handle, ssidref, handle, &dom)) < 0 )
         return PyErr_SetFromErrno(xc_error);
 
     return PyInt_FromLong(dom);
@@ -181,7 +205,7 @@
 
     uint32_t dom;
     int vcpu = 0;
-    cpumap_t cpumap = 0xFFFFFFFF;
+    cpumap_t cpumap = ~0ULL;
 
     static char *kwd_list[] = { "dom", "vcpu", "cpumap", NULL };
 
@@ -189,7 +213,7 @@
                                       &dom, &vcpu, &cpumap) )
         return NULL;
 
-    if ( xc_domain_pincpu(xc->xc_handle, dom, vcpu, &cpumap) != 0 )
+    if ( xc_domain_pincpu(xc->xc_handle, dom, vcpu, cpumap) != 0 )
         return PyErr_SetFromErrno(xc_error);
     
     Py_INCREF(zero);
@@ -223,7 +247,7 @@
                                      PyObject *kwds)
 {
     XcObject *xc = (XcObject *)self;
-    PyObject *list, *vcpu_list, *cpumap_list, *info_dict;
+    PyObject *list, *info_dict;
 
     uint32_t first_dom = 0;
     int max_doms = 1024, nr_doms, i, j;
@@ -249,15 +273,9 @@
     list = PyList_New(nr_doms);
     for ( i = 0 ; i < nr_doms; i++ )
     {
-        vcpu_list = PyList_New(MAX_VIRT_CPUS);
-        cpumap_list = PyList_New(MAX_VIRT_CPUS);
-        for ( j = 0; j < MAX_VIRT_CPUS; j++ ) {
-            PyList_SetItem( vcpu_list, j, 
-                            Py_BuildValue("i", info[i].vcpu_to_cpu[j]));
-            PyList_SetItem( cpumap_list, j, 
-                            Py_BuildValue("i", info[i].cpumap[j]));
-        }
-                 
+        PyObject *pyhandle = PyList_New(sizeof(xen_domain_handle_t));
+        for ( j = 0; j < sizeof(xen_domain_handle_t); j++ )
+            PyList_SetItem(pyhandle, j, PyInt_FromLong(info[i].handle[j]));
         info_dict = Py_BuildValue("{s:i,s:i,s:i,s:i,s:i,s:i,s:i,s:i"
                                   ",s:l,s:L,s:l,s:i,s:i}",
                                   "dom",       info[i].domid,
@@ -273,10 +291,8 @@
                                   "maxmem_kb", info[i].max_memkb,
                                   "ssidref",   info[i].ssidref,
                                   "shutdown_reason", info[i].shutdown_reason);
-        PyDict_SetItemString( info_dict, "vcpu_to_cpu", vcpu_list );
-        PyDict_SetItemString( info_dict, "cpumap", cpumap_list );
-        PyList_SetItem( list, i, info_dict);
- 
+        PyDict_SetItemString(info_dict, "handle", pyhandle);
+        PyList_SetItem(list, i, info_dict);
     }
 
     free(info);
diff -r 70aa62954e91 -r bd3268de4145 tools/python/xen/xend/XendDomainInfo.py
--- a/tools/python/xen/xend/XendDomainInfo.py   Fri Oct 14 00:42:34 2005
+++ b/tools/python/xen/xend/XendDomainInfo.py   Fri Oct 14 14:40:48 2005
@@ -1377,8 +1377,7 @@
         # target = 0 means use all processors
         if target > 0:
             # count the number of online vcpus (cpu values in v2c map >= 0)
-            vcpu_to_cpu = dom_get(dom)['vcpu_to_cpu']
-            vcpus_online = len(filter(lambda x: x >= 0, vcpu_to_cpu))
+            vcpus_online = dom_get(dom)['vcpus']
             log.debug("found %d vcpus online", vcpus_online)
 
             # disable any extra vcpus that are online over the requested target
diff -r 70aa62954e91 -r bd3268de4145 tools/python/xen/xm/main.py
--- a/tools/python/xen/xm/main.py       Fri Oct 14 00:42:34 2005
+++ b/tools/python/xen/xm/main.py       Fri Oct 14 14:40:48 2005
@@ -270,9 +270,9 @@
         vcpuinfo['dom']    = int(sxp.child_value(info, 'domid', '-1'))
         vcpuinfo['vcpu']   = int(count)
         vcpuinfo['cpu']    = int(cpu)
-        vcpuinfo['cpumap'] = int(cpumap[count])&mask
+        #vcpuinfo['cpumap'] = int(cpumap[count])&mask
         count = count + 1
-        dominfo['vcpulist'].append(vcpuinfo)
+        #dominfo['vcpulist'].append(vcpuinfo)
     return dominfo
         
 def xm_brief_list(domsinfo):
diff -r 70aa62954e91 -r bd3268de4145 
tools/xenstat/libxenstat/src/xen-interface.c
--- a/tools/xenstat/libxenstat/src/xen-interface.c      Fri Oct 14 00:42:34 2005
+++ b/tools/xenstat/libxenstat/src/xen-interface.c      Fri Oct 14 14:40:48 2005
@@ -178,16 +178,15 @@
                             unsigned int vcpu)
 {
        dom0_op_t op;
-       op.u.getvcpucontext.domain = domain;
-       op.u.getvcpucontext.vcpu = vcpu;
-       op.u.getvcpucontext.ctxt = NULL;
-
-       if (xi_make_dom0_op(handle, &op, DOM0_GETVCPUCONTEXT) < 0) {
-               perror("DOM0_GETVCPUCONTEXT Hypercall failed");
-               return -1;
-       }
-
-       return op.u.getvcpucontext.cpu_time;
+       op.u.getvcpuinfo.domain = domain;
+       op.u.getvcpuinfo.vcpu   = vcpu;
+
+       if (xi_make_dom0_op(handle, &op, DOM0_GETVCPUINFO) < 0) {
+               perror("DOM0_GETVCPUINFO Hypercall failed");
+               return -1;
+       }
+
+       return op.u.getvcpuinfo.cpu_time;
 }
 
 /* gets xen version information from hypervisor */
diff -r 70aa62954e91 -r bd3268de4145 xen/arch/x86/setup.c
--- a/xen/arch/x86/setup.c      Fri Oct 14 00:42:34 2005
+++ b/xen/arch/x86/setup.c      Fri Oct 14 14:40:48 2005
@@ -420,6 +420,9 @@
            nr_pages << (PAGE_SHIFT - 10));
     total_pages = nr_pages;
 
+    /* Sanity check for unwanted bloat of dom0_op_t structure. */
+    BUG_ON(sizeof(((dom0_op_t *)0)->u) != sizeof(((dom0_op_t *)0)->u.pad));
+
     init_frametable();
 
     end_boot_allocator();
diff -r 70aa62954e91 -r bd3268de4145 xen/common/dom0_ops.c
--- a/xen/common/dom0_ops.c     Fri Oct 14 00:42:34 2005
+++ b/xen/common/dom0_ops.c     Fri Oct 14 14:40:48 2005
@@ -48,26 +48,20 @@
     
     info->domain = d->domain_id;
     
-    memset(&info->vcpu_to_cpu, -1, sizeof(info->vcpu_to_cpu));
-    memset(&info->cpumap, 0, sizeof(info->cpumap));
-
     /* 
      * - domain is marked as blocked only if all its vcpus are blocked
      * - domain is marked as running if any of its vcpus is running
-     * - only map vcpus that aren't down.  Note, at some point we may
-     *   wish to demux the -1 value to indicate down vs. not-ever-booted
      */
     for_each_vcpu ( d, v ) {
-        /* only map vcpus that are up */
-        if ( !(test_bit(_VCPUF_down, &v->vcpu_flags)) )
-            info->vcpu_to_cpu[v->vcpu_id] = v->processor;
-        info->cpumap[v->vcpu_id] = v->cpumap;
-        if ( !(v->vcpu_flags & VCPUF_blocked) )
-            flags &= ~DOMFLAGS_BLOCKED;
-        if ( v->vcpu_flags & VCPUF_running )
-            flags |= DOMFLAGS_RUNNING;
         cpu_time += v->cpu_time;
-        vcpu_count++;
+        if ( !test_bit(_VCPUF_down, &v->vcpu_flags) )
+        {
+            if ( !(v->vcpu_flags & VCPUF_blocked) )
+                flags &= ~DOMFLAGS_BLOCKED;
+            if ( v->vcpu_flags & VCPUF_running )
+                flags |= DOMFLAGS_RUNNING;
+            vcpu_count++;
+        }
     }
     
     info->cpu_time = cpu_time;
@@ -87,6 +81,8 @@
     info->tot_pages         = d->tot_pages;
     info->max_pages         = d->max_pages;
     info->shared_info_frame = __pa(d->shared_info) >> PAGE_SHIFT;
+
+    memcpy(info->handle, d->handle, sizeof(xen_domain_handle_t));
 }
 
 long do_dom0_op(dom0_op_t *u_dom0_op)
@@ -214,6 +210,9 @@
         if ( (d = do_createdomain(dom, pro)) == NULL )
             break;
 
+        memcpy(d->handle, op->u.createdomain.handle,
+               sizeof(xen_domain_handle_t));
+
         ret = 0;
 
         op->u.createdomain.domain = d->domain_id;
@@ -288,8 +287,6 @@
         domid_t dom = op->u.pincpudomain.domain;
         struct domain *d = find_domain_by_id(dom);
         struct vcpu *v;
-        cpumap_t cpumap;
-
 
         if ( d == NULL )
         {
@@ -320,26 +317,17 @@
             break;
         }
 
-        if ( copy_from_user(&cpumap, op->u.pincpudomain.cpumap,
-                            sizeof(cpumap)) )
-        {
-            ret = -EFAULT;
-            put_domain(d);
-            break;
-        }
-
-        /* update cpumap for this vcpu */
-        v->cpumap = cpumap;
-
-        if ( cpumap == CPUMAP_RUNANYWHERE )
+        v->cpumap = op->u.pincpudomain.cpumap;
+
+        if ( v->cpumap == CPUMAP_RUNANYWHERE )
         {
             clear_bit(_VCPUF_cpu_pinned, &v->vcpu_flags);
         }
         else
         {
             /* pick a new cpu from the usable map */
-            int new_cpu = (int)find_first_set_bit(cpumap) % num_online_cpus();
-
+            int new_cpu;
+            new_cpu = (int)find_first_set_bit(v->cpumap) % num_online_cpus();
             vcpu_pause(v);
             vcpu_migrate_cpu(v, new_cpu);
             set_bit(_VCPUF_cpu_pinned, &v->vcpu_flags);
@@ -393,6 +381,8 @@
         put_domain(d);
     }
     break;
+
+
 
     case DOM0_GETDOMAININFOLIST:
     { 
@@ -446,66 +436,73 @@
         struct vcpu_guest_context *c;
         struct domain             *d;
         struct vcpu               *v;
-        int i;
-
-        d = find_domain_by_id(op->u.getvcpucontext.domain);
-        if ( d == NULL )
-        {
-            ret = -ESRCH;
-            break;
-        }
-
+
+        ret = -ESRCH;
+        if ( (d = find_domain_by_id(op->u.getvcpucontext.domain)) == NULL )
+            break;
+
+        ret = -EINVAL;
         if ( op->u.getvcpucontext.vcpu >= MAX_VIRT_CPUS )
-        {
-            ret = -EINVAL;
-            put_domain(d);
-            break;
-        }
-
-        /* find first valid vcpu starting from request. */
-        v = NULL;
-        for ( i = op->u.getvcpucontext.vcpu; i < MAX_VIRT_CPUS; i++ )
-        {
-            v = d->vcpu[i];
-            if ( v != NULL && !(test_bit(_VCPUF_down, &v->vcpu_flags)) )
-                break;
-        }
-        
-        if ( v == NULL )
-        {
-            ret = -ESRCH;
-            put_domain(d);
-            break;
-        }
-
-        op->u.getvcpucontext.cpu_time = v->cpu_time;
-
-        if ( op->u.getvcpucontext.ctxt != NULL )
-        {
-            if ( (c = xmalloc(struct vcpu_guest_context)) == NULL )
-            {
-                ret = -ENOMEM;
-                put_domain(d);
-                break;
-            }
-
-            if ( v != current )
-                vcpu_pause(v);
-
-            arch_getdomaininfo_ctxt(v,c);
-
-            if ( v != current )
-                vcpu_unpause(v);
-
-            if ( copy_to_user(op->u.getvcpucontext.ctxt, c, sizeof(*c)) )
-                ret = -EINVAL;
-
-            xfree(c);
-        }
+            goto getvcpucontext_out;
+
+        ret = -ESRCH;
+        v = d->vcpu[op->u.getvcpucontext.vcpu];
+        if ( (v == NULL) || test_bit(_VCPUF_down, &v->vcpu_flags) )
+            goto getvcpucontext_out;
+
+        ret = -ENOMEM;
+        if ( (c = xmalloc(struct vcpu_guest_context)) == NULL )
+            goto getvcpucontext_out;
+
+        if ( v != current )
+            vcpu_pause(v);
+
+        arch_getdomaininfo_ctxt(v,c);
+        ret = 0;
+
+        if ( v != current )
+            vcpu_unpause(v);
+
+        if ( copy_to_user(op->u.getvcpucontext.ctxt, c, sizeof(*c)) )
+            ret = -EFAULT;
+
+        xfree(c);
 
         if ( copy_to_user(u_dom0_op, op, sizeof(*op)) )     
-            ret = -EINVAL;
-
+            ret = -EFAULT;
+
+    getvcpucontext_out:
+        put_domain(d);
+    }
+    break;
+
+    case DOM0_GETVCPUINFO:
+    { 
+        struct domain *d;
+        struct vcpu   *v;
+
+        ret = -ESRCH;
+        if ( (d = find_domain_by_id(op->u.getvcpuinfo.domain)) == NULL )
+            break;
+
+        ret = -EINVAL;
+        if ( op->u.getvcpuinfo.vcpu >= MAX_VIRT_CPUS )
+            goto getvcpuinfo_out;
+
+        ret = -ESRCH;
+        v = d->vcpu[op->u.getvcpuinfo.vcpu];
+        if ( (v == NULL) || test_bit(_VCPUF_down, &v->vcpu_flags) )
+            goto getvcpuinfo_out;
+
+        op->u.getvcpuinfo.cpu_time = v->cpu_time;
+        op->u.getvcpuinfo.cpu      = v->processor;
+        op->u.getvcpuinfo.cpumap   = v->cpumap;
+        ret = 0;
+
+        if ( copy_to_user(u_dom0_op, op, sizeof(*op)) )     
+            ret = -EFAULT;
+
+    getvcpuinfo_out:
         put_domain(d);
     }
     break;
diff -r 70aa62954e91 -r bd3268de4145 xen/common/keyhandler.c
--- a/xen/common/keyhandler.c   Fri Oct 14 00:42:34 2005
+++ b/xen/common/keyhandler.c   Fri Oct 14 14:40:48 2005
@@ -99,7 +99,7 @@
 static void do_task_queues(unsigned char key)
 {
     struct domain *d;
-    struct vcpu *v;
+    struct vcpu   *v;
     s_time_t       now = NOW();
 
     printk("'%c' pressed -> dumping task queues (now=0x%X:%08X)\n", key,
@@ -112,6 +112,12 @@
         printk("Xen: DOM %u, flags=%lx refcnt=%d nr_pages=%d "
                "xenheap_pages=%d\n", d->domain_id, d->domain_flags,
                atomic_read(&d->refcnt), d->tot_pages, d->xenheap_pages);
+        printk("     handle=%02x%02x%02x%02x-%02x%02x%02x%02x-"
+               "%02x%02x%02x%02x-%02x%02x%02x%02x\n",
+               d->handle[ 0], d->handle[ 1], d->handle[ 2], d->handle[ 3],
+               d->handle[ 4], d->handle[ 5], d->handle[ 6], d->handle[ 7],
+               d->handle[ 8], d->handle[ 9], d->handle[10], d->handle[11],
+               d->handle[12], d->handle[13], d->handle[14], d->handle[15]);
 
         dump_pageframe_info(d);
                
diff -r 70aa62954e91 -r bd3268de4145 xen/include/public/dom0_ops.h
--- a/xen/include/public/dom0_ops.h     Fri Oct 14 00:42:34 2005
+++ b/xen/include/public/dom0_ops.h     Fri Oct 14 14:40:48 2005
@@ -45,6 +45,7 @@
 typedef struct {
     /* IN parameters */
     uint32_t ssidref;
+    xen_domain_handle_t handle;
     /* IN/OUT parameters. */
     /* Identifier for new domain (auto-allocate if zero is specified). */
     domid_t domain;
@@ -88,9 +89,8 @@
     unsigned long shared_info_frame;       /* MFN of shared_info struct */
     uint64_t cpu_time;
     uint32_t n_vcpu;
-    int32_t  vcpu_to_cpu[MAX_VIRT_CPUS];  /* current mapping   */
-    cpumap_t cpumap[MAX_VIRT_CPUS];       /* allowable mapping */
     uint32_t ssidref;
+    xen_domain_handle_t handle;
 } dom0_getdomaininfo_t;
 
 #define DOM0_SETDOMAININFO      13
@@ -180,9 +180,9 @@
 #define DOM0_PINCPUDOMAIN     20
 typedef struct {
     /* IN variables. */
-    domid_t      domain;
-    uint16_t          vcpu;
-    cpumap_t     *cpumap;
+    domid_t   domain;
+    uint16_t  vcpu;
+    cpumap_t cpumap;
 } dom0_pincpudomain_t;
 
 /* Get trace buffers machine base address */
@@ -352,11 +352,23 @@
 
 #define DOM0_GETVCPUCONTEXT      37
 typedef struct {
+    /* IN variables. */
     domid_t  domain;                  /* domain to be affected */
     uint16_t vcpu;                    /* vcpu # */
-    vcpu_guest_context_t *ctxt;       /* NB. IN/OUT variable. */
+    /* OUT variables. */
+    vcpu_guest_context_t *ctxt;
+} dom0_getvcpucontext_t;
+
+#define DOM0_GETVCPUINFO         43
+typedef struct {
+    /* IN variables. */
+    domid_t  domain;                  /* domain to be affected */
+    uint16_t vcpu;                    /* vcpu # */
+    /* OUT variables. */
     uint64_t cpu_time;                 
-} dom0_getvcpucontext_t;
+    uint32_t cpu;                     /* current mapping   */
+    cpumap_t cpumap;                  /* allowable mapping */
+} dom0_getvcpuinfo_t;
 
 #define DOM0_GETDOMAININFOLIST   38
 typedef struct {
@@ -426,10 +438,12 @@
         dom0_microcode_t         microcode;
         dom0_ioport_permission_t ioport_permission;
         dom0_getvcpucontext_t    getvcpucontext;
+        dom0_getvcpuinfo_t       getvcpuinfo;
         dom0_getdomaininfolist_t getdomaininfolist;
         dom0_platform_quirk_t    platform_quirk;
         dom0_physical_memory_map_t physical_memory_map;
         dom0_max_vcpus_t         max_vcpus;
+        uint8_t                  pad[128];
     } u;
 } dom0_op_t;
 
diff -r 70aa62954e91 -r bd3268de4145 xen/include/public/xen.h
--- a/xen/include/public/xen.h  Fri Oct 14 00:42:34 2005
+++ b/xen/include/public/xen.h  Fri Oct 14 14:40:48 2005
@@ -437,6 +437,8 @@
 
 typedef uint64_t cpumap_t;
 
+typedef uint8_t xen_domain_handle_t[16];
+
 #endif /* !__ASSEMBLY__ */
 
 #endif /* __XEN_PUBLIC_XEN_H__ */
diff -r 70aa62954e91 -r bd3268de4145 xen/include/xen/sched.h
--- a/xen/include/xen/sched.h   Fri Oct 14 00:42:34 2005
+++ b/xen/include/xen/sched.h   Fri Oct 14 14:40:48 2005
@@ -139,6 +139,9 @@
     struct arch_domain arch;
 
     void *ssid; /* sHype security subject identifier */
+
+    /* Control-plane tools handle for this domain. */
+    xen_domain_handle_t handle;
 };
 
 struct domain_setup_info

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


 


Rackspace

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