[libvirt] [PATCH] qemu: Use memory-object-file when needed

Martin Kletzander mkletzan at redhat.com
Tue Jan 12 17:48:02 UTC 2016


We were missing a check for '!nodemask' in the condition that decides
whether we need memory-object-file or not.  We only used userNodeset,
but forgot that we might need to use nodemask even if that's not set.

Even though there was a test for this, the args file was incorrect, so
it is very nicely visible what this change does function-wise.  Even
with that I added the same test but instead of auto nodeset I specified
one in numatune/memory just to make sure it fixes the problem.

Signed-off-by: Martin Kletzander <mkletzan at redhat.com>
---
 src/qemu/qemu_command.c                            |  3 ++-
 .../qemuxml2argv-numatune-auto-prefer.args         |  4 ++-
 ...emuxml2argv-numatune-hugepages-no-memnode.args} |  3 ++-
 .../qemuxml2argv-numatune-hugepages-no-memnode.xml | 29 ++++++++++++++++++++++
 tests/qemuxml2argvtest.c                           |  2 ++
 5 files changed, 38 insertions(+), 3 deletions(-)
 copy tests/qemuxml2argvdata/{qemuxml2argv-numatune-auto-prefer.args => qemuxml2argv-numatune-hugepages-no-memnode.args} (72%)
 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-numatune-hugepages-no-memnode.xml

diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 5d3ab3a4eac5..debaea491be8 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -5238,7 +5238,8 @@ qemuBuildMemoryBackendStr(unsigned long long size,
     }

     /* If none of the following is requested... */
-    if (!pagesize && !userNodeset && !memAccess && !nodeSpecified && !force) {
+    if (!pagesize && !userNodeset && !memAccess &&
+        !nodeSpecified && !nodemask && !force) {
         /* report back that using the new backend is not necessary
          * to achieve the desired configuration */
         ret = 1;
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-numatune-auto-prefer.args b/tests/qemuxml2argvdata/qemuxml2argv-numatune-auto-prefer.args
index b4c49d44c525..710dae2aaa56 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-numatune-auto-prefer.args
+++ b/tests/qemuxml2argvdata/qemuxml2argv-numatune-auto-prefer.args
@@ -10,7 +10,9 @@ QEMU_AUDIO_DRV=none \
 -M pc \
 -m 64 \
 -smp 1 \
--numa node,nodeid=0,cpus=0,mem=64 \
+-object memory-backend-ram,id=ram-node0,size=67108864,host-nodes=0-3,\
+policy=preferred \
+-numa node,nodeid=0,cpus=0,memdev=ram-node0 \
 -uuid 9f4b6512-e73a-4a25-93e8-5307802821ce \
 -nographic \
 -monitor unix:/tmp/test-monitor,server,nowait \
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-numatune-auto-prefer.args b/tests/qemuxml2argvdata/qemuxml2argv-numatune-hugepages-no-memnode.args
similarity index 72%
copy from tests/qemuxml2argvdata/qemuxml2argv-numatune-auto-prefer.args
copy to tests/qemuxml2argvdata/qemuxml2argv-numatune-hugepages-no-memnode.args
index b4c49d44c525..3ee81e9da7be 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-numatune-auto-prefer.args
+++ b/tests/qemuxml2argvdata/qemuxml2argv-numatune-hugepages-no-memnode.args
@@ -10,7 +10,8 @@ QEMU_AUDIO_DRV=none \
 -M pc \
 -m 64 \
 -smp 1 \
--numa node,nodeid=0,cpus=0,mem=64 \
+-object memory-backend-ram,id=ram-node0,size=67108864,host-nodes=1,policy=bind \
+-numa node,nodeid=0,cpus=0,memdev=ram-node0 \
 -uuid 9f4b6512-e73a-4a25-93e8-5307802821ce \
 -nographic \
 -monitor unix:/tmp/test-monitor,server,nowait \
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-numatune-hugepages-no-memnode.xml b/tests/qemuxml2argvdata/qemuxml2argv-numatune-hugepages-no-memnode.xml
new file mode 100644
index 000000000000..83fe891306ce
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-numatune-hugepages-no-memnode.xml
@@ -0,0 +1,29 @@
+<domain type='qemu'>
+  <name>QEMUGuest</name>
+  <uuid>9f4b6512-e73a-4a25-93e8-5307802821ce</uuid>
+  <memory unit='KiB'>65536</memory>
+  <currentMemory unit='KiB'>65536</currentMemory>
+  <vcpu placement='static'>1</vcpu>
+  <numatune>
+    <memory nodeset='1'/>
+  </numatune>
+  <os>
+    <type arch='x86_64' machine='pc'>hvm</type>
+    <boot dev='hd'/>
+  </os>
+  <cpu>
+    <numa>
+      <cell id='0' cpus='0' memory='65536' unit='KiB'/>
+    </numa>
+  </cpu>
+  <clock offset='utc'/>
+  <on_poweroff>destroy</on_poweroff>
+  <on_reboot>restart</on_reboot>
+  <on_crash>destroy</on_crash>
+  <devices>
+    <emulator>/usr/bin/kvm</emulator>
+    <controller type='usb' index='0'/>
+    <controller type='pci' index='0' model='pci-root'/>
+    <memballoon model='virtio'/>
+  </devices>
+</domain>
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
index 7cd8c8e18f0e..1a7cfa3d9de3 100644
--- a/tests/qemuxml2argvtest.c
+++ b/tests/qemuxml2argvtest.c
@@ -1344,6 +1344,8 @@ mymain(void)
     DO_TEST("numatune-auto-nodeset-invalid", NONE);
     DO_TEST("numatune-auto-prefer", QEMU_CAPS_OBJECT_MEMORY_RAM,
             QEMU_CAPS_OBJECT_MEMORY_FILE);
+    DO_TEST("numatune-hugepages-no-memnode", 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);
-- 
2.7.0




More information about the libvir-list mailing list