if (rc == 0)
needBackend = true;
}
- } else if (needBackend) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
- _("NUMA without specified memory backing is not "
- "supported with this QEMU binary"));
- goto cleanup;
}
if (!needBackend &&
bool hasMemoryCap = virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_MEMORY_RAM) ||
virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_MEMORY_FILE) ||
virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_MEMORY_MEMFD);
+ bool needBacking = false;
if (virDomainNumatuneHasPerNodeBinding(def->numa) && !hasMemoryCap) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
return -1;
}
+ if (virDomainNumaHasHMAT(def->numa) ||
+ !virQEMUCapsGetMachineNumaMemSupported(qemuCaps,
+ def->virtType,
+ def->os.machine)) {
+ needBacking = true;
+ }
+
+ if (needBacking && !hasMemoryCap) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("NUMA without specified memory backing is not "
+ "supported with this QEMU binary"));
+ return -1;
+ }
+
return 0;
}
DO_TEST("numatune-memnode-no-memory", QEMU_CAPS_OBJECT_MEMORY_FILE);
DO_TEST("numatune-distances", QEMU_CAPS_NUMA, QEMU_CAPS_NUMA_DIST);
DO_TEST("numatune-no-vcpu", QEMU_CAPS_NUMA);
- DO_TEST("numatune-hmat", QEMU_CAPS_NUMA_HMAT);
+ DO_TEST("numatune-hmat", QEMU_CAPS_NUMA_HMAT, QEMU_CAPS_OBJECT_MEMORY_RAM);
DO_TEST("bios-nvram", NONE);
DO_TEST("bios-nvram-os-interleave", NONE);