[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