[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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |