diff --git a/src/conf/numa_conf.c b/src/conf/numa_conf.c index 5c123b96b7..b5963ace0f 100644 --- a/src/conf/numa_conf.c +++ b/src/conf/numa_conf.c @@ -759,11 +759,15 @@ virDomainNumaDefCPUParseXML(virDomainNumaPtr def, } VIR_FREE(tmp); - for (j = 0; j < i; j++) { + for (j = 0; j < n; j++) { + if (j == cur_cell || !def->mem_nodes[j].cpumask) + continue; + if (virBitmapOverlaps(def->mem_nodes[j].cpumask, - def->mem_nodes[i].cpumask)) { + def->mem_nodes[cur_cell].cpumask)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("NUMA cells %zu and %zu have overlapping vCPU ids"), i, j); + _("NUMA cells %u and %zu have overlapping vCPU ids"), + cur_cell, j); goto cleanup; } } diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-numa-disordered.xml b/tests/qemuxml2argvdata/qemuxml2argv-cpu-numa-disordered.xml new file mode 100644 index 0000000000..ad3160741c --- /dev/null +++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-numa-disordered.xml @@ -0,0 +1,26 @@ + + QEMUGuest1 + c7a5fdbd-edaf-9455-926a-d65c16db1809 + 328650 + 328650 + 16 + + hvm + + + + + + + + + + + + destroy + restart + destroy + + /usr/bin/qemu + + diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-cpu-numa-disordered.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-cpu-numa-disordered.xml new file mode 100644 index 0000000000..0a76f12e2b --- /dev/null +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-cpu-numa-disordered.xml @@ -0,0 +1,29 @@ + + QEMUGuest1 + c7a5fdbd-edaf-9455-926a-d65c16db1809 + 328650 + 328650 + 16 + + hvm + + + + + + + + + + + + destroy + restart + destroy + + /usr/bin/qemu + + + + + diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c index d41954e0a0..5a20ebc152 100644 --- a/tests/qemuxml2xmltest.c +++ b/tests/qemuxml2xmltest.c @@ -608,6 +608,7 @@ mymain(void) DO_TEST_DIFFERENT("cpu-numa1"); DO_TEST_DIFFERENT("cpu-numa2"); DO_TEST_DIFFERENT("cpu-numa-no-memory-element"); + DO_TEST_DIFFERENT("cpu-numa-disordered"); DO_TEST("cpu-numa-disjoint"); DO_TEST("cpu-numa-memshared");