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@xxxxxxxxxxxx | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/ -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list