Re: [RFC PATCH 03/12] domain_conf: introduce cpu def helpers

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

 



On Wed, Jan 21, 2015 at 16:00:55 +0800, Zhu Guihua wrote:
> virDomainCPUDefFree - free memory allocated
> virDomainCPUDefParseXML - parse job type
> virDomainCPUDefFormat - output job type

This patch lacks addition to the RNG schemas that would describe the
elements that are added and the correct values.

Also lacks change to the docs/formatdomain.html.in


> 
> Signed-off-by: Zhu Guihua <zhugh.fnst@xxxxxxxxxxxxxx>
> ---
>  src/conf/domain_conf.c | 100 +++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 100 insertions(+)
> 
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index e036d75..1f05056 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c

...

> +
> +static virDomainCPUDefPtr
> +virDomainCPUDefParseXML(xmlNodePtr node, virDomainDefPtr def)
> +{
> +    char *driver = NULL;
> +    char *apic_id = NULL;
> +    virDomainCPUDefPtr dev;
> +
> +    if (!(dev = virDomainCPUDefNew()))
> +        return NULL;
> +
> +    driver = virXMLPropString(node, "driver");

The driver should rather be an enum value that is parsed from the string
rather than stroing an inline string. This limits the namespace of
devices libvirt supports but simplifies all matching of the driver later
on.


> +    if (driver == NULL) {
> +        virReportError(VIR_ERR_XML_ERROR, "%s",
> +                       _("missing cpu device driver"));
> +        goto error;
> +    }
> +    dev->driver = driver;
> +
> +    apic_id = virXMLPropString(node, "apic_id");
> +
> +    if (!apic_id)
> +        dev->apic_id = virDomainCPUGetFreeApicID(def);
> +    else
> +        dev->apic_id = atoi (apic_id);

Atoi is not allowed, use virStrToLong* instead. Also spaces after
function name is forbidden.

> +
> +    driver = NULL;
> +    apic_id = NULL;
> +
> + cleanup:
> +    VIR_FREE(driver);
> +    VIR_FREE(apic_id);
> +
> +    return dev;
> +
> + error:
> +    virDomainCPUDefFree(dev);
> +    dev = NULL;
> +    goto cleanup;
> +}
> +
>  virDomainDeviceDefPtr
>  virDomainDeviceDefParse(const char *xmlStr,
>                          const virDomainDef *def,
> @@ -11187,6 +11253,9 @@ virDomainDeviceDefParse(const char *xmlStr,
>              goto error;
>          break;
>      case VIR_DOMAIN_DEVICE_CPU:
> +        if (!(dev->data.cpu = virDomainCPUDefParseXML(node, (virDomainDefPtr)def)))
> +            goto error;
> +        break;
>      case VIR_DOMAIN_DEVICE_NONE:
>      case VIR_DOMAIN_DEVICE_LAST:
>          break;
> @@ -18142,6 +18211,31 @@ virDomainChrDefFormat(virBufferPtr buf,
>  }
>  
>  static int
> +virDomainCPUDefFormat(virBufferPtr buf,
> +                      virDomainCPUDefPtr def,
> +                      unsigned int flags)
> +{
> +    char *apic_id = NULL;
> +
> +    ignore_value(virAsprintf(&apic_id, "%d", def->apic_id));
> +
> +    virBufferAsprintf(buf, "<cpu driver='%s'", def->driver);
> +
> +    virBufferEscapeString(buf, " apic_id='%s'", apic_id);

Um? Why not virBufferAsprintf(buf, " apic_id='%d', apic_id)?

You won't need the intermediate string. Also it leaks the apic_id
string.


> +
> +    virBufferAddLit(buf, ">\n");
> +    virBufferAdjustIndent(buf, 2);
> +
> +    if (virDomainDeviceInfoFormat(buf, &def->info, flags) < 0)
> +        return -1;
> +
> +    virBufferAdjustIndent(buf, -2);
> +    virBufferAddLit(buf, "</cpu>\n");
> +
> +    return 0;
> +}
> +
> +static int

Peter

Attachment: signature.asc
Description: Digital signature

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list

[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]