
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@veillard.com | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/