From: Peter Krempa Date: Mon, 25 May 2015 13:43:29 +0000 (+0200) Subject: conf: Store cpu count as unsigned int X-Git-Tag: v1.2.17-rc1~280 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fbbea79890882da2d3eba203d1453e53dc56ebaf;p=thirdparty%2Flibvirt.git conf: Store cpu count as unsigned int While we probably won't see machines with more than 65536 cpus for a while lets store the cpu count as an integer so that we can avoid quite a lot of overflow checks in our code. --- diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index d2c1d2e8a9..2a12a0653a 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -13893,7 +13893,6 @@ virDomainDefParseXML(xmlDocPtr xml, int n; long id = -1; virDomainDefPtr def; - unsigned long count; bool uuid_generated = false; virHashTablePtr bootHash = NULL; bool usb_none = false; @@ -14176,44 +14175,31 @@ virDomainDefParseXML(xmlDocPtr xml, &def->mem.swap_hard_limit) < 0) goto error; - n = virXPathULong("string(./vcpu[1])", ctxt, &count); - if (n == -2) { - virReportError(VIR_ERR_XML_ERROR, "%s", - _("maximum vcpus must be an integer")); - goto error; - } else if (n < 0) { - def->maxvcpus = 1; - } else { - def->maxvcpus = count; - if (count == 0 || (unsigned short) count != count) { - virReportError(VIR_ERR_XML_ERROR, - _("invalid maximum number of vCPUs '%lu'"), count); + if ((n = virXPathUInt("string(./vcpu[1])", ctxt, &def->maxvcpus)) < 0) { + if (n == -2) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("maximum vcpus count must be an integer")); goto error; } + + def->maxvcpus = 1; } - n = virXPathULong("string(./vcpu[1]/@current)", ctxt, &count); - if (n == -2) { - virReportError(VIR_ERR_XML_ERROR, "%s", - _("current vcpus must be an integer")); - goto error; - } else if (n < 0) { - def->vcpus = def->maxvcpus; - } else { - def->vcpus = count; - if (count == 0 || (unsigned short) count != count) { - virReportError(VIR_ERR_XML_ERROR, - _("invalid current number of vCPUs '%lu'"), count); + if ((n = virXPathUInt("string(./vcpu[1]/@current)", ctxt, &def->vcpus)) < 0) { + if (n == -2) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("current vcpus count must be an integer")); goto error; } - if (def->maxvcpus < count) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("maxvcpus must not be less than current vcpus " - "(%d < %lu)"), - def->maxvcpus, count); - goto error; - } + def->vcpus = def->maxvcpus; + } + + if (def->maxvcpus < def->vcpus) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("maxvcpus must not be less than current vcpus " + "(%u < %u)"), def->maxvcpus, def->vcpus); + goto error; } tmp = virXPathString("string(./vcpu[1]/@placement)", ctxt); diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index b69ad9ec1b..906ec4f9c5 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -2159,8 +2159,8 @@ struct _virDomainDef { virDomainBlkiotune blkio; virDomainMemtune mem; - unsigned short vcpus; - unsigned short maxvcpus; + unsigned int vcpus; + unsigned int maxvcpus; int placement_mode; virBitmapPtr cpumask; diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c index c40826deff..05990c7a68 100644 --- a/src/libvirt-domain.c +++ b/src/libvirt-domain.c @@ -7279,10 +7279,6 @@ virDomainSetVcpusFlags(virDomainPtr domain, unsigned int nvcpus, virCheckNonZeroArgGoto(nvcpus, error); - if ((unsigned short) nvcpus != nvcpus) { - virReportError(VIR_ERR_OVERFLOW, _("input too large: %u"), nvcpus); - goto error; - } conn = domain->conn; if (conn->driver->domainSetVcpusFlags) { @@ -7403,11 +7399,6 @@ virDomainPinVcpu(virDomainPtr domain, unsigned int vcpu, virCheckNonNullArgGoto(cpumap, error); virCheckPositiveArgGoto(maplen, error); - if ((unsigned short) vcpu != vcpu) { - virReportError(VIR_ERR_OVERFLOW, _("input too large: %u"), vcpu); - goto error; - } - if (conn->driver->domainPinVcpu) { int ret; ret = conn->driver->domainPinVcpu(domain, vcpu, cpumap, maplen); @@ -7475,11 +7466,6 @@ virDomainPinVcpuFlags(virDomainPtr domain, unsigned int vcpu, virCheckNonNullArgGoto(cpumap, error); virCheckPositiveArgGoto(maplen, error); - if ((unsigned short) vcpu != vcpu) { - virReportError(VIR_ERR_OVERFLOW, _("input too large: %u"), vcpu); - goto error; - } - if (conn->driver->domainPinVcpuFlags) { int ret; ret = conn->driver->domainPinVcpuFlags(domain, vcpu, cpumap, maplen, flags); diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index a4134f38e1..3e6633c867 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -4870,12 +4870,6 @@ qemuDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus, VIR_DOMAIN_VCPU_MAXIMUM | VIR_DOMAIN_VCPU_GUEST, -1); - if (!nvcpus || (unsigned short) nvcpus != nvcpus) { - virReportError(VIR_ERR_INVALID_ARG, - _("argument out of range: %d"), nvcpus); - return -1; - } - if (!(vm = qemuDomObjFromDomain(dom))) goto cleanup;