if (!copy->cells[i].cpumask)
goto error;
}
- copy->cells_cpus = cpu->cells_cpus;
}
return copy;
virCPUFeatureDefPtr features;
size_t ncells;
virCellDefPtr cells;
- unsigned int cells_cpus;
};
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 <numa> exceeds the"
" <vcpu> count"));
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 */
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];
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;
+}
int virDomainNumaDefCPUParseXML(virCPUDefPtr def, xmlXPathContextPtr ctxt);
int virDomainNumaDefCPUFormat(virBufferPtr buf, virCPUDefPtr def);
+unsigned int virDomainNumaGetCPUCountTotal(virCPUDefPtr numa);
+
+
#endif /* __NUMA_CONF_H__ */
host_cpu_features, /* features */
0, /* ncells */
NULL, /* cells */
- 0, /* cells_cpus */
};
if ((caps = virCapabilitiesNew(host_cpu.arch,