[libvirt] [PATCH 2/5] conf: Split up virDomainVcpuPinDefParseXML

John Ferlan jferlan at redhat.com
Tue Apr 14 01:27:02 UTC 2015



On 04/07/2015 02:50 PM, Peter Krempa wrote:
> Extract part that parses iothreads into virDomainIothreadPinDefParseXML
> ---
>  src/conf/domain_conf.c | 112 +++++++++++++++++++++++++++++--------------------
>  1 file changed, 66 insertions(+), 46 deletions(-)
> 
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index ec7f9c9..10ec17a 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -13153,30 +13153,19 @@ virDomainIdmapDefParseXML(xmlXPathContextPtr ctxt,
>      return idmap;
>  }
> 
> -/* Parse the XML definition for a vcpupin or emulatorpin.
> +/* Parse the XML definition for a vcpupin

[set bikeshed=flog...   technically the above would go in patch 1, but
I'm not concerned due to where this is headed... same in about 4 lines ]

>   *
>   * vcpupin has the form of
>   *   <vcpupin vcpu='0' cpuset='0'/>
> - *
> - * and emulatorpin has the form of
> - *   <emulatorpin cpuset='0'/>
> - *
> - * and an iothreadspin has the form
> - *   <iothreadpin iothread='1' cpuset='2'/>
> - *
> - * A vcpuid of -1 is valid and only valid for emulatorpin. So callers
> - * have to check the returned cpuid for validity.
>   */
>  static virDomainPinDefPtr
>  virDomainVcpuPinDefParseXML(xmlNodePtr node,
>                              xmlXPathContextPtr ctxt,
> -                            int maxvcpus,
> -                            bool iothreads)
> +                            int maxvcpus)
>  {
>      virDomainPinDefPtr def;
>      xmlNodePtr oldnode = ctxt->node;
>      int vcpuid = -1;
> -    unsigned int iothreadid;
>      char *tmp = NULL;
>      int ret;
> 
> @@ -13185,28 +13174,66 @@ virDomainVcpuPinDefParseXML(xmlNodePtr node,
> 
>      ctxt->node = node;
> 
> -    if (!iothreads) {
> -        ret = virXPathInt("string(./@vcpu)", ctxt, &vcpuid);
> -        if ((ret == -2) || (vcpuid < -1)) {
> -            virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> -                           _("vcpu id must be an unsigned integer or -1"));
> -            goto error;
> -        } else if (vcpuid == -1) {
> -            virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> -                           _("vcpu id value -1 is not allowed for vcpupin"));
> -            goto error;
> -        }
> +    ret = virXPathInt("string(./@vcpu)", ctxt, &vcpuid);
> +    if ((ret == -2) || (vcpuid < -1)) {
> +        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> +                       _("vcpu id must be an unsigned integer or -1"));
> +        goto error;
> +    } else if (vcpuid == -1) {
> +        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> +                       _("vcpu id value -1 is not allowed for vcpupin"));
> +        goto error;
> +    }
> 
> -        if (vcpuid >= maxvcpus) {
> +    if (vcpuid >= maxvcpus) {
> +        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> +                       _("vcpu id must be less than maxvcpus"));
> +        goto error;
> +    }
> +
> +    def->id = vcpuid;
> +
> +    if (!(tmp = virXMLPropString(node, "cpuset"))) {
>              virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> -                           _("vcpu id must be less than maxvcpus"));
> -            goto error;
> -        }
> +                           _("missing cpuset for vcpupin"));
> 
> -        def->id = vcpuid;
> +        goto error;
>      }
> 
> -    if (iothreads && (tmp = virXPathString("string(./@iothread)", ctxt))) {
> +    if (virBitmapParse(tmp, 0, &def->cpumask, VIR_DOMAIN_CPUMASK_LEN) < 0)
> +        goto error;
> +
> + cleanup:
> +    VIR_FREE(tmp);
> +    ctxt->node = oldnode;
> +    return def;
> +
> + error:
> +    VIR_FREE(def);
> +    goto cleanup;
> +}
> +
> +
> +/* Parse the XML definition for a iothreadpin
> + * and an iothreadspin has the form
> + *   <iothreadpin iothread='1' cpuset='2'/>
> + */
> +static virDomainPinDefPtr
> +virDomainIothreadPinDefParseXML(xmlNodePtr node,
> +                                xmlXPathContextPtr ctxt,
> +                                int iothreads)

s/Iothread/IOThread/


ACK with this

John


> +{
> +    virDomainPinDefPtr def;
> +    xmlNodePtr oldnode = ctxt->node;
> +    unsigned int iothreadid;
> +    char *tmp = NULL;
> +
> +    if (VIR_ALLOC(def) < 0)
> +        return NULL;
> +
> +    ctxt->node = node;
> +
> +    if ((tmp = virXPathString("string(./@iothread)", ctxt))) {
>          if (virStrToLong_uip(tmp, NULL, 10, &iothreadid) < 0) {
>              virReportError(VIR_ERR_XML_ERROR,
>                             _("invalid setting for iothread '%s'"), tmp);
> @@ -13220,11 +13247,9 @@ virDomainVcpuPinDefParseXML(xmlNodePtr node,
>              goto error;
>          }
> 
> -        /* NB: maxvcpus is actually def->iothreads
> -         * IOThreads are numbered "iothread1...iothread<n>", where
> -         * "n" is the iothreads value
> -         */
> -        if (iothreadid > maxvcpus) {
> +        /* IOThreads are numbered "iothread1...iothread<n>", where
> +         * "n" is the iothreads value */
> +        if (iothreadid > iothreads) {
>              virReportError(VIR_ERR_XML_ERROR, "%s",
>                             _("iothread id must not exceed iothreads"));
>              goto error;
> @@ -13234,13 +13259,8 @@ virDomainVcpuPinDefParseXML(xmlNodePtr node,
>      }
> 
>      if (!(tmp = virXMLPropString(node, "cpuset"))) {
> -        if (iothreads)
> -            virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> -                           _("missing cpuset for iothreadpin"));
> -        else
> -            virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> -                           _("missing cpuset for vcpupin"));
> -
> +        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> +                       _("missing cpuset for iothreadpin"));
>          goto error;
>      }
> 
> @@ -13258,6 +13278,7 @@ virDomainVcpuPinDefParseXML(xmlNodePtr node,
>  }
> 
> 
> +
>  /* Parse the XML definition for emulatorpin.
>   * emulatorpin has the form of
>   *   <emulatorpin cpuset='0'/>
> @@ -13970,7 +13991,7 @@ virDomainDefParseXML(xmlDocPtr xml,
>      for (i = 0; i < n; i++) {
>          virDomainPinDefPtr vcpupin = NULL;
>          vcpupin = virDomainVcpuPinDefParseXML(nodes[i], ctxt,
> -                                              def->maxvcpus, false);
> +                                              def->maxvcpus);
> 
>          if (!vcpupin)
>              goto error;
> @@ -14057,9 +14078,8 @@ virDomainDefParseXML(xmlDocPtr xml,
> 
>      for (i = 0; i < n; i++) {
>          virDomainPinDefPtr iothreadpin = NULL;
> -        iothreadpin = virDomainVcpuPinDefParseXML(nodes[i], ctxt,
> -                                                  def->iothreads,
> -                                                  true);
> +        iothreadpin = virDomainIothreadPinDefParseXML(nodes[i], ctxt,
> +                                                      def->iothreads);
>          if (!iothreadpin)
>              goto error;
> 




More information about the libvir-list mailing list