[libvirt] [PATCH v2 1/9] Functions for computing baseline CPU from a set of host CPUs
Daniel Veillard
veillard at redhat.com
Thu Feb 11 16:18:09 UTC 2010
On Thu, Feb 11, 2010 at 04:43:51PM +0100, Jiri Denemark wrote:
> Baseline CPU is the best CPU which can be used for a guest on any of the
> hosts.
>
[...]
> +char *
> +cpuBaselineXML(const char **xmlCPUs,
> + unsigned int ncpus,
> + const char **models,
> + unsigned int nmodels)
> +{
> + xmlDocPtr doc = NULL;
> + xmlXPathContextPtr ctxt = NULL;
> + virCPUDefPtr *cpus = NULL;
> + virCPUDefPtr cpu = NULL;
> + char *cpustr;
> + unsigned int i;
> +
> + if (xmlCPUs == NULL && ncpus != 0) {
> + virCPUReportError(VIR_ERR_INTERNAL_ERROR,
> + "%s", _("nonzero ncpus doesn't match with NULL xmlCPUs"));
> + return NULL;
> + }
> +
> + if (ncpus < 1) {
> + virCPUReportError(VIR_ERR_INVALID_ARG, "%s", _("No CPUs given"));
> + return NULL;
> + }
> +
> + if (VIR_ALLOC_N(cpus, ncpus))
> + goto no_memory;
> +
> + for (i = 0; i < ncpus; i++) {
> + doc = xmlParseMemory(xmlCPUs[i], strlen(xmlCPUs[i]));
> + if (doc == NULL || (ctxt = xmlXPathNewContext(doc)) == NULL)
> + goto no_memory;
Hum, no, doc == NULL might come from parsing error, raising an OOMError
in that case sounds weird, unless you're 100% sure this is well formed
XML...
> + ctxt->node = xmlDocGetRootElement(doc);
> +
> + cpus[i] = virCPUDefParseXML(ctxt->node, ctxt, VIR_CPU_TYPE_HOST);
> + if (cpus[i] == NULL)
> + goto error;
> +
> + xmlXPathFreeContext(ctxt);
> + xmlFreeDoc(doc);
> + ctxt = NULL;
> + doc = NULL;
> + }
> +
> + if (!(cpu = cpuBaseline(cpus, ncpus, models, nmodels)))
> + goto error;
> +
> + cpustr = virCPUDefFormat(cpu, "", 0);
> +
> +cleanup:
> + if (cpus) {
> + for (i = 0; i < ncpus; i++)
> + virCPUDefFree(cpus[i]);
> + VIR_FREE(cpus);
> + }
> + virCPUDefFree(cpu);
> + xmlXPathFreeContext(ctxt);
> + xmlFreeDoc(doc);
> +
> + return cpustr;
> +
> +no_memory:
> + virReportOOMError();
> +error:
> + cpustr = NULL;
> + goto cleanup;
> +}
Otherwise looks fine, ACK,
Daniel
--
Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/
daniel at veillard.com | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library http://libvirt.org/
More information about the libvir-list
mailing list