diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 084530f9a7..8e864abd5e 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -4699,7 +4699,9 @@ qemuBuildMemoryBackendStr(unsigned long long size, props = NULL; if (!hugepage) { - if ((nodemask || force) && + bool nodeSpecified = virDomainNumatuneNodeSpecified(def->numatune, guestNode); + + if ((userNodeset || nodeSpecified || force) && !virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_MEMORY_RAM)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("this qemu doesn't support the " @@ -4709,7 +4711,7 @@ qemuBuildMemoryBackendStr(unsigned long long size, /* report back that using the new backend is not necessary to achieve * the desired configuration */ - if (!nodemask) { + if (!userNodeset && !nodeSpecified) { ret = 1; goto cleanup; } diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cputune-numatune.args b/tests/qemuxml2argvdata/qemuxml2argv-cputune-numatune.args new file mode 100644 index 0000000000..481f72ffd2 --- /dev/null +++ b/tests/qemuxml2argvdata/qemuxml2argv-cputune-numatune.args @@ -0,0 +1,5 @@ +LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \ +/usr/bin/qemu-system-x86_64 -S -M pc-q35-2.3 -m 128 \ +-smp 2,maxcpus=6,sockets=6,cores=1,threads=1 \ +-nographic -monitor unix:/tmp/test-monitor,server,nowait -no-acpi \ +-boot c -net none -serial none -parallel none diff --git a/tests/qemuxml2argvdata/qemuxml2argv-numatune-auto-prefer.args b/tests/qemuxml2argvdata/qemuxml2argv-numatune-auto-prefer.args new file mode 100644 index 0000000000..0b1b0f5055 --- /dev/null +++ b/tests/qemuxml2argvdata/qemuxml2argv-numatune-auto-prefer.args @@ -0,0 +1,5 @@ +LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \ +/usr/bin/kvm -S -M pc -m 64 -smp 1 \ +-numa node,nodeid=0,cpus=0,mem=64 \ +-nographic -monitor unix:/tmp/test-monitor,server,nowait \ +-no-acpi -boot c -usb -net none -serial none -parallel none diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 2de92ebfc3..39ed66b2e4 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -1260,6 +1260,10 @@ mymain(void) DO_TEST("cputune-zero-shares", QEMU_CAPS_NAME); DO_TEST_PARSE_ERROR("cputune-iothreadsched-toomuch", QEMU_CAPS_NAME); DO_TEST_PARSE_ERROR("cputune-vcpusched-overlap", QEMU_CAPS_NAME); + DO_TEST("cputune-numatune", QEMU_CAPS_SMP_TOPOLOGY, + QEMU_CAPS_KVM, + QEMU_CAPS_OBJECT_MEMORY_RAM, + QEMU_CAPS_OBJECT_MEMORY_FILE); DO_TEST("numatune-memory", NONE); DO_TEST_PARSE_ERROR("numatune-memory-invalid-nodeset", NONE); @@ -1272,6 +1276,8 @@ mymain(void) DO_TEST_FAILURE("numatune-memnode-no-memory", NONE); DO_TEST("numatune-auto-nodeset-invalid", NONE); + DO_TEST("numatune-auto-prefer", QEMU_CAPS_OBJECT_MEMORY_RAM, + QEMU_CAPS_OBJECT_MEMORY_FILE); DO_TEST_FAILURE("numatune-static-nodeset-exceed-hostnode", QEMU_CAPS_OBJECT_MEMORY_RAM); DO_TEST_PARSE_ERROR("numatune-memnode-nocpu", NONE);