[libvirt] [PATCH 08/12] vcpu: support maxvcpu in domain_conf

Daniel Veillard veillard at redhat.com
Fri Oct 1 15:01:36 UTC 2010


On Wed, Sep 29, 2010 at 06:02:12PM -0600, Eric Blake wrote:
> * src/conf/domain_conf.h (_virDomainDef): Adjust vcpus to unsigned
> short, to match virDomainGetInfo limit.  Add maxvcpus member.
[...]
> 
> Two tightly-related changes.  One: virDomainGetInfo implicitly limits
> vcpus to a 16-bit number; so there's no need to pretend otherwise
> through the rest of the code.

 well, yes and no, in a few years we may look ridiculous, but it would
 be good to have the new APIs cleared up from that limitation.

> Two: add a new maxvcpus member, but
> for now, ensure that all domains treat vcpus == maxvcpus at all
> times (domains that support hot-unplugging vcpus will be changed
> in later patches).
[...]
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -4179,6 +4179,7 @@ static virDomainDefPtr virDomainDefParseXML(virCapsPtr caps,
>      int i, n;
>      long id = -1;
>      virDomainDefPtr def;
> +    unsigned long count;
> 
>      if (VIR_ALLOC(def) < 0) {
>          virReportOOMError();
> @@ -4244,8 +4245,27 @@ static virDomainDefPtr virDomainDefParseXML(virCapsPtr caps,
>      if (node)
>          def->hugepage_backed = 1;
> 
> -    if (virXPathULong("string(./vcpu[1])", ctxt, &def->vcpus) < 0)
> -        def->vcpus = 1;
> +    if (virXPathULong("string(./vcpu[1])", ctxt, &count) < 0)
> +        def->maxvcpus = 1;
> +    else {
> +        def->maxvcpus = count;
> +        if (def->maxvcpus != count || count == 0) {
> +            virDomainReportError(VIR_ERR_INTERNAL_ERROR,
> +                                 _("invalid maxvcpus %lu"), count);
> +            goto error;
> +        }
> +    }

  Hum, virXPathULong will return -2 for an non ULong format, and we
discard the error by just setting up maxvcpus = 1 silently but on the
other hand we make a fuss about 0 being provided :-)
  If we start raising an error on invalid values maybe it should be
done for both (-2 need to be checked)
  but not a big deal.

> +    if (virXPathULong("string(./vcpu[1]/@current)", ctxt, &count) < 0)
> +        def->vcpus = def->maxvcpus;
> +    else {
> +        def->vcpus = count;
> +        if (def->vcpus != count || count == 0 || def->maxvcpus < count) {
> +            virDomainReportError(VIR_ERR_INTERNAL_ERROR,
> +                                 _("invalid current vcpus %lu"), count);
> +            goto error;
> +        }
> +    }

  same here

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