[libvirt] [PATCH 1/4] conf: cpu: Fix parsing of vendor_id

Martin Kletzander mkletzan at redhat.com
Mon Dec 17 14:55:30 UTC 2012


On 12/17/2012 12:22 PM, Peter Krempa wrote:
> From: Ken ICHIKAWA <ichikawa.ken at jp.fujitsu.com>
> 
> This patch fixes a problem that vendor_id attribute can not be defined
> when fallback attribute is not defined.
> 
> If I define domain xml like below:
> <domain>
>   <cpu>
>     <model vendor_id='aaaabbbbcccc'>core2duo</model>
>   </cpu>
> </domain>
> 
> In dumpxml, vendor_id is not reflected:
> <domain>
>   <cpu mode='custom' match='exact'>
>     <model fallback='allow'>core2duo</model>
>   </cpu>
> </domain>
> 
> The expected output is:
> <domain>
>   <cpu mode='custom' match='exact'>
>     <model fallback='allow' vendor_id='aaaabbbbcccc'>core2duo</model>
>   </cpu>
> </domain>
> 
> If the fallback attribute and vendor_id attribute is defined at the same
> time, it's reflected as expected.
> 
> Signed-off-by: Ken ICHIKAWA <ichikawa.ken at jp.fujitsu.com>
> ---
>  src/conf/cpu_conf.c | 42 +++++++++++++++++++++---------------------
>  1 file changed, 21 insertions(+), 21 deletions(-)
> 
> diff --git a/src/conf/cpu_conf.c b/src/conf/cpu_conf.c
> index 8cb54a3..6157ed7 100644
> --- a/src/conf/cpu_conf.c
> +++ b/src/conf/cpu_conf.c
> @@ -300,32 +300,32 @@ virCPUDefParseXML(const xmlNodePtr node,
>                      goto error;
>                  }
>              }
> +        }
> 
> -            if (virXPathBoolean("boolean(./model[1]/@vendor_id)", ctxt)) {
> -                char *vendor_id;
> -
> -                vendor_id = virXPathString("string(./model[1]/@vendor_id)",
> -                                           ctxt);
> -                if (!vendor_id ||
> -                    strlen(vendor_id) != VIR_CPU_VENDOR_ID_LENGTH) {
> -                    virReportError(VIR_ERR_XML_ERROR,
> -                                   _("vendor_id must be exactly"
> -                                     " %d characters long"),
> -                                   VIR_CPU_VENDOR_ID_LENGTH);
> +        if (virXPathBoolean("boolean(./model[1]/@vendor_id)", ctxt)) {
> +            char *vendor_id;
> +
> +            vendor_id = virXPathString("string(./model[1]/@vendor_id)",
> +                                       ctxt);
> +            if (!vendor_id ||
> +                strlen(vendor_id) != VIR_CPU_VENDOR_ID_LENGTH) {
> +                virReportError(VIR_ERR_XML_ERROR,
> +                               _("vendor_id must be exactly"
> +                                 " %d characters long"),
> +                               VIR_CPU_VENDOR_ID_LENGTH);
> +                VIR_FREE(vendor_id);
> +                goto error;
> +            }
> +            /* ensure that the string can be passed to qemu*/
> +            for (i = 0; i < strlen(vendor_id); i++) {
> +                if (vendor_id[i]==',') {
> +                    virReportError(VIR_ERR_XML_ERROR, "%s",
> +                                   _("vendor id is invalid"));
>                      VIR_FREE(vendor_id);
>                      goto error;
>                  }
> -                /* ensure that the string can be passed to qemu*/
> -                for (i = 0; i < strlen(vendor_id); i++) {
> -                    if (vendor_id[i]==',') {
> -                        virReportError(VIR_ERR_XML_ERROR, "%s",
> -                                       _("vendor id is invalid"));
> -                        VIR_FREE(vendor_id);
> -                        goto error;
> -                    }
> -                }
> -                def->vendor_id = vendor_id;
>              }
> +            def->vendor_id = vendor_id;
>          }
>      }
> 

ACK thanks to the fact that you are cleaning it up in next patches.

Martin




More information about the libvir-list mailing list