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");