diff --git a/src/conf/cpu_conf.c b/src/conf/cpu_conf.c index 49236186e67bf0f6f1542af1eac5594f4d034afc..0e3ce26a3d473bbe495221952c4b60bdab782ede 100644 --- a/src/conf/cpu_conf.c +++ b/src/conf/cpu_conf.c @@ -155,7 +155,6 @@ virCPUDefCopy(const virCPUDef *cpu) if (!copy->cells[i].cpumask) goto error; } - copy->cells_cpus = cpu->cells_cpus; } return copy; diff --git a/src/conf/cpu_conf.h b/src/conf/cpu_conf.h index 01633840f9008343cf8938edd95c30692155319b..d2563e2b8b6aeb5bf2b70fee0bc34b7f3cd92127 100644 --- a/src/conf/cpu_conf.h +++ b/src/conf/cpu_conf.h @@ -117,7 +117,6 @@ struct _virCPUDef { virCPUFeatureDefPtr features; size_t ncells; virCellDefPtr cells; - unsigned int cells_cpus; }; diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index cddbd50be8b5ae20e6eceda41ab5e98d052622de..e399a3301aa96c784bbfe25ed7e6cbc2635788ef 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -13501,7 +13501,7 @@ virDomainDefParseXML(xmlDocPtr xml, goto error; if (def->cpu && - def->cpu->cells_cpus > def->maxvcpus) { + virDomainNumaGetCPUCountTotal(def->cpu) > def->maxvcpus) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Number of CPUs in exceeds the" " count")); diff --git a/src/conf/numa_conf.c b/src/conf/numa_conf.c index dfd260637db14d827b4246b1541ec101f3fc4c87..d21d62e74573e9c1c5ed6fe3844854fff9610021 100644 --- a/src/conf/numa_conf.c +++ b/src/conf/numa_conf.c @@ -713,7 +713,7 @@ virDomainNumaDefCPUParseXML(virCPUDefPtr def, def->ncells = n; for (i = 0; i < n; i++) { - int rc, ncpus = 0; + int rc; unsigned int cur_cell = i; /* cells are in order of parsing or explicitly numbered */ @@ -748,12 +748,10 @@ virDomainNumaDefCPUParseXML(virCPUDefPtr def, goto cleanup; } - ncpus = virBitmapParse(tmp, 0, &def->cells[cur_cell].cpumask, - VIR_DOMAIN_CPUMASK_LEN); - - if (ncpus <= 0) + if (virBitmapParse(tmp, 0, &def->cells[cur_cell].cpumask, + VIR_DOMAIN_CPUMASK_LEN) <= 0) goto cleanup; - def->cells_cpus += ncpus; + VIR_FREE(tmp); ctxt->node = nodes[i]; @@ -819,3 +817,16 @@ virDomainNumaDefCPUFormat(virBufferPtr buf, return 0; } + + +unsigned int +virDomainNumaGetCPUCountTotal(virCPUDefPtr numa) +{ + size_t i; + unsigned int ret = 0; + + for (i = 0; i < numa->ncells; i++) + ret += virBitmapCountBits(numa->cells[i].cpumask); + + return ret; +} diff --git a/src/conf/numa_conf.h b/src/conf/numa_conf.h index 107c83f5c4371eb4324a647c7d2407e62a1db5b0..efb1bf01e3565c1420612cba03d1fb2ee7dfa60d 100644 --- a/src/conf/numa_conf.h +++ b/src/conf/numa_conf.h @@ -128,4 +128,7 @@ bool virDomainNumatuneNodeSpecified(virDomainNumaPtr numatune, int virDomainNumaDefCPUParseXML(virCPUDefPtr def, xmlXPathContextPtr ctxt); int virDomainNumaDefCPUFormat(virBufferPtr buf, virCPUDefPtr def); +unsigned int virDomainNumaGetCPUCountTotal(virCPUDefPtr numa); + + #endif /* __NUMA_CONF_H__ */ diff --git a/tests/testutilsqemu.c b/tests/testutilsqemu.c index 64f709ae62aa744fec279212784fc4330a9a9d5b..4a3df8ab2237a14e62d9d1d5a337f64f7ab9c8b0 100644 --- a/tests/testutilsqemu.c +++ b/tests/testutilsqemu.c @@ -244,7 +244,6 @@ virCapsPtr testQemuCapsInit(void) host_cpu_features, /* features */ 0, /* ncells */ NULL, /* cells */ - 0, /* cells_cpus */ }; if ((caps = virCapabilitiesNew(host_cpu.arch,