From 1e8d6c6ef07a33ab338c2bf38fa017d4f2123335 Mon Sep 17 00:00:00 2001 From: Michal Privoznik Date: Wed, 14 Jun 2017 10:40:20 +0200 Subject: [PATCH] qemu: Don't try to use hugepages if not enabled https://bugzilla.redhat.com/show_bug.cgi?id=1214369 My fix 671d18594f4 was incomplete. If domain doesn't have hugepages enabled, because of missing condition we would still be putting hugepages path onto qemu cmd line. Clean up the conditions so that it's more visible next time. Signed-off-by: Michal Privoznik --- src/qemu/qemu_command.c | 12 ++++----- .../qemuxml2argv-cpu-numa-memshared.args | 26 +++++++++++++++++++ tests/qemuxml2argvtest.c | 1 + 3 files changed, 33 insertions(+), 6 deletions(-) create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-cpu-numa-memshared.args diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 3e1552a1b5..8c12b2be08 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -3410,19 +3410,19 @@ qemuBuildMemoryBackendStr(virJSONValuePtr *backendProps, def->mem.source == VIR_DOMAIN_MEMORY_SOURCE_FILE) { *backendType = "memory-backend-file"; - if (mem->nvdimmPath) { + if (pagesize) { + if (qemuGetDomainHupageMemPath(def, cfg, pagesize, &memPath) < 0) + goto cleanup; + prealloc = true; + } else if (mem->nvdimmPath) { if (VIR_STRDUP(memPath, mem->nvdimmPath) < 0) goto cleanup; prealloc = true; - } else if (!pagesize && def->mem.source == VIR_DOMAIN_MEMORY_SOURCE_FILE) { + } else { /* We can have both pagesize and mem source. If that's the case, * prefer hugepages as those are more specific. */ if (VIR_STRDUP(memPath, cfg->memoryBackingDir) < 0) goto cleanup; - } else { - if (qemuGetDomainHupageMemPath(def, cfg, pagesize, &memPath) < 0) - goto cleanup; - prealloc = true; } if (virJSONValueObjectAdd(props, diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-numa-memshared.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-numa-memshared.args new file mode 100644 index 0000000000..cceffce3ad --- /dev/null +++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-numa-memshared.args @@ -0,0 +1,26 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/home/test \ +USER=test \ +LOGNAME=test \ +QEMU_AUDIO_DRV=none \ +/usr/bin/qemu-system-x86_64 \ +-name QEMUGuest1 \ +-S \ +-M pc \ +-m 214 \ +-smp 16,sockets=2,cores=4,threads=2 \ +-object memory-backend-file,id=ram-node0,mem-path=/var/lib/libvirt/qemu/ram,\ +share=yes,size=112197632 \ +-numa node,nodeid=0,cpus=0-7,memdev=ram-node0 \ +-object memory-backend-file,id=ram-node1,mem-path=/var/lib/libvirt/qemu/ram,\ +share=no,size=112197632 \ +-numa node,nodeid=1,cpus=8-15,memdev=ram-node1 \ +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +-nographic \ +-nodefaults \ +-monitor unix:/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \ +-no-acpi \ +-boot n \ +-usb \ +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 43d3f1bd39..799aea9faf 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -1541,6 +1541,7 @@ mymain(void) DO_TEST("cpu-numa-disjoint", QEMU_CAPS_NUMA); DO_TEST_FAILURE("cpu-numa-memshared", QEMU_CAPS_OBJECT_MEMORY_RAM); DO_TEST_FAILURE("cpu-numa-memshared", NONE); + DO_TEST("cpu-numa-memshared", QEMU_CAPS_OBJECT_MEMORY_FILE); DO_TEST("cpu-host-model", NONE); DO_TEST("cpu-host-model-vendor", NONE); skipLegacyCPUs = true; -- 2.47.2