On Fri, May 16, 2008 at 10:50:20PM +0100, Daniel P. Berrange wrote: > The XML format allows for an initial CPU mask to be specified for a guests > vCPUs. eg with this XML: > > <vcpu cpuset='1-4,8-20,525'>1</vcpu> what about output. In the xen case we went though the exercise to dump a cpuset string back only if it wasn't 'all set'. > Since we have CPU pinning support from my previous patch, adding in the > initial pinning is fairly easy. We first pass the '-S' arg to QEMU when > forking it. This causes it to initialize, but not start the CPUs in the > guest. We then set the affinity mask for all its CPUs, and then send > the 'cont' command to the monitor to start execution. [...] > + /* Extract domain vcpu info */ > + obj = xmlXPathEval(BAD_CAST "string(/domain/vcpu[1]/@cpuset)", ctxt); > + if ((obj == NULL) || (obj->type != XPATH_STRING) || > + (obj->stringval == NULL) || (obj->stringval[0] == 0)) { > + /* Allow use on all CPUS */ > + memset(def->cpumask, 1, QEMUD_CPUMASK_LEN); > + } else { > + char *set = (char *)obj->stringval; > + memset(def->cpumask, 0, QEMUD_CPUMASK_LEN); > + if (virParseCpuSet(conn, (const char **)&set, > + 0, def->cpumask, > + QEMUD_CPUMASK_LEN) < 0) { > + qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR, > + "%s", _("malformed vcpu mask information")); > + goto error; > + } > + } > + xmlXPathFreeObject(obj); virXPathString() would make it way cleaner IMHO [...] > virBufferVSprintf(&buf, " <memory>%lu</memory>\n", def->maxmem); > virBufferVSprintf(&buf, " <currentMemory>%lu</currentMemory>\n", def->memory); > - virBufferVSprintf(&buf, " <vcpu>%d</vcpu>\n", def->vcpus); > + > + for (n = 0 ; n < QEMUD_CPUMASK_LEN ; n++) > + if (def->cpumask[n] != 1) > + allones = 0; > + > + if (allones) { > + virBufferVSprintf(&buf, " <vcpu>%d</vcpu>\n", def->vcpus); okay that answers my question :-) Patch looks fine. Since we have migration nearly ready, it would be interesting to check the combination of both at some point too, Looks fine to me, +1, Daniel -- Red Hat Virtualization group http://redhat.com/virtualization/ Daniel Veillard | virtualization library http://libvirt.org/ veillard@xxxxxxxxxx | libxml GNOME XML XSLT toolkit http://xmlsoft.org/ http://veillard.com/ | Rpmfind RPM search engine http://rpmfind.net/ -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list