This new test case checks whether we are handling NVDIMMs
correctly when checking for overlapping memory devices (see
previous commit). Without previous commit, this test case would
fail, yet it was produced in real life (at least the NVDIMM
part) and thus it is valid.
Signed-off-by: Michal Privoznik <mprivozn(a)redhat.com>
---
...-hotplug-nvdimm-overlap.x86_64-latest.args | 40 ++++++++++
...y-hotplug-nvdimm-overlap.x86_64-latest.xml | 1 +
.../memory-hotplug-nvdimm-overlap.xml | 77 +++++++++++++++++++
tests/qemuxmlconftest.c | 4 +
4 files changed, 122 insertions(+)
create mode 100644
tests/qemuxmlconfdata/memory-hotplug-nvdimm-overlap.x86_64-latest.args
create mode 120000 tests/qemuxmlconfdata/memory-hotplug-nvdimm-overlap.x86_64-latest.xml
create mode 100644 tests/qemuxmlconfdata/memory-hotplug-nvdimm-overlap.xml
diff --git a/tests/qemuxmlconfdata/memory-hotplug-nvdimm-overlap.x86_64-latest.args
b/tests/qemuxmlconfdata/memory-hotplug-nvdimm-overlap.x86_64-latest.args
new file mode 100644
index 0000000000..e74d2d7013
--- /dev/null
+++ b/tests/qemuxmlconfdata/memory-hotplug-nvdimm-overlap.x86_64-latest.args
@@ -0,0 +1,40 @@
+LC_ALL=C \
+PATH=/bin \
+HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1 \
+USER=test \
+LOGNAME=test \
+XDG_DATA_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.local/share \
+XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.cache \
+XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
+/usr/bin/qemu-system-x86_64 \
+-name guest=QEMUGuest1,debug-threads=on \
+-S \
+-object
'{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-QEMUGuest1/master-key.aes"}'
\
+-machine pc,usb=off,dump-guest-core=off,nvdimm=on,acpi=off \
+-accel tcg \
+-cpu qemu64 \
+-m size=1048576k,slots=16,maxmem=1099511627776k \
+-overcommit mem-lock=off \
+-smp 2,sockets=2,dies=1,clusters=1,cores=1,threads=1 \
+-object
'{"qom-type":"memory-backend-ram","id":"ram-node0","size":1073741824}'
\
+-numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
+-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
+-display none \
+-no-user-config \
+-nodefaults \
+-chardev socket,id=charmonitor,fd=1729,server=on,wait=off \
+-mon chardev=charmonitor,id=monitor,mode=control \
+-rtc base=utc \
+-no-shutdown \
+-boot strict=on \
+-device
'{"driver":"piix3-usb-uhci","id":"usb","bus":"pci.0","addr":"0x1.0x2"}'
\
+-object
'{"qom-type":"memory-backend-file","id":"memnvdimm0","mem-path":"/tmp/nvdimm1","share":true,"prealloc":true,"size":536870912,"align":2097152}'
\
+-device
'{"driver":"nvdimm","node":0,"label-size":131072,"memdev":"memnvdimm0","id":"nvdimm0","slot":0,"addr":4294967296}'
\
+-object
'{"qom-type":"memory-backend-file","id":"memnvdimm1","mem-path":"/tmp/nvdimm2","share":true,"prealloc":true,"size":536870912,"align":2097152}'
\
+-device
'{"driver":"nvdimm","node":0,"label-size":131072,"memdev":"memnvdimm1","id":"nvdimm1","slot":1,"addr":4829741056}'
\
+-blockdev
'{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest1","node-name":"libvirt-1-storage","read-only":false}'
\
+-device
'{"driver":"ide-hd","bus":"ide.0","unit":0,"drive":"libvirt-1-storage","id":"ide0-0-0","bootindex":1}'
\
+-audiodev
'{"id":"audio1","driver":"none"}' \
+-device
'{"driver":"virtio-balloon-pci","id":"balloon0","bus":"pci.0","addr":"0x3"}'
\
+-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \
+-msg timestamp=on
diff --git a/tests/qemuxmlconfdata/memory-hotplug-nvdimm-overlap.x86_64-latest.xml
b/tests/qemuxmlconfdata/memory-hotplug-nvdimm-overlap.x86_64-latest.xml
new file mode 120000
index 0000000000..c5c37c4de9
--- /dev/null
+++ b/tests/qemuxmlconfdata/memory-hotplug-nvdimm-overlap.x86_64-latest.xml
@@ -0,0 +1 @@
+memory-hotplug-nvdimm-overlap.xml
\ No newline at end of file
diff --git a/tests/qemuxmlconfdata/memory-hotplug-nvdimm-overlap.xml
b/tests/qemuxmlconfdata/memory-hotplug-nvdimm-overlap.xml
new file mode 100644
index 0000000000..707b00c75e
--- /dev/null
+++ b/tests/qemuxmlconfdata/memory-hotplug-nvdimm-overlap.xml
@@ -0,0 +1,77 @@
+<domain type='qemu'>
+ <name>QEMUGuest1</name>
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+ <maxMemory slots='16' unit='KiB'>1099511627776</maxMemory>
+ <memory unit='KiB'>1267710</memory>
+ <currentMemory unit='KiB'>1267710</currentMemory>
+ <vcpu placement='static' cpuset='0-1'>2</vcpu>
+ <os>
+ <type arch='x86_64' machine='pc'>hvm</type>
+ <boot dev='hd'/>
+ </os>
+ <idmap>
+ <uid start='0' target='1000' count='10'/>
+ <gid start='0' target='1000' count='10'/>
+ </idmap>
+ <cpu mode='custom' match='exact' check='none'>
+ <model fallback='forbid'>qemu64</model>
+ <topology sockets='2' dies='1' clusters='1'
cores='1' threads='1'/>
+ <numa>
+ <cell id='0' cpus='0-1' memory='1048576'
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/qemu-system-x86_64</emulator>
+ <disk type='block' device='disk'>
+ <driver name='qemu' type='raw'/>
+ <source dev='/dev/HostVG/QEMUGuest1'/>
+ <target dev='hda' bus='ide'/>
+ <address type='drive' controller='0' bus='0'
target='0' unit='0'/>
+ </disk>
+ <controller type='ide' index='0'>
+ <address type='pci' domain='0x0000' bus='0x00'
slot='0x01' function='0x1'/>
+ </controller>
+ <controller type='usb' index='0' model='piix3-uhci'>
+ <address type='pci' domain='0x0000' bus='0x00'
slot='0x01' function='0x2'/>
+ </controller>
+ <controller type='pci' index='0' model='pci-root'/>
+ <input type='mouse' bus='ps2'/>
+ <input type='keyboard' bus='ps2'/>
+ <audio id='1' type='none'/>
+ <memballoon model='virtio'>
+ <address type='pci' domain='0x0000' bus='0x00'
slot='0x03' function='0x0'/>
+ </memballoon>
+ <memory model='nvdimm' access='shared'>
+ <source>
+ <path>/tmp/nvdimm1</path>
+ <alignsize unit='KiB'>2048</alignsize>
+ </source>
+ <target>
+ <size unit='KiB'>524288</size>
+ <node>0</node>
+ <label>
+ <size unit='KiB'>128</size>
+ </label>
+ </target>
+ <address type='dimm' slot='0' base='0x100000000'/>
+ </memory>
+ <memory model='nvdimm' access='shared'>
+ <source>
+ <path>/tmp/nvdimm2</path>
+ <alignsize unit='KiB'>2048</alignsize>
+ </source>
+ <target>
+ <size unit='KiB'>524288</size>
+ <node>0</node>
+ <label>
+ <size unit='KiB'>128</size>
+ </label>
+ </target>
+ <address type='dimm' slot='1' base='0x11fe00000'/>
+ </memory>
+ </devices>
+</domain>
diff --git a/tests/qemuxmlconftest.c b/tests/qemuxmlconftest.c
index e1ee1fbce3..03453e8ec8 100644
--- a/tests/qemuxmlconftest.c
+++ b/tests/qemuxmlconftest.c
@@ -2554,6 +2554,10 @@ mymain(void)
DO_TEST_CAPS_LATEST("memory-hotplug-virtio-mem");
DO_TEST_CAPS_LATEST("memory-hotplug-multiple");
DO_TEST_CAPS_LATEST_PARSE_ERROR("memory-hotplug-virtio-mem-overlap-address");
+ /* Test whether overlap calculation done in
+ * virDomainMemoryDefCheckConflict() works for NVDIMMs which are special
+ * than other memory devices because of how they handle <labelsize/> */
+ DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-overlap");
DO_TEST_CAPS_ARCH_LATEST("machine-aeskeywrap-on-caps", "s390x");
DO_TEST_CAPS_ARCH_LATEST("machine-aeskeywrap-on-cap", "s390x");
--
2.43.0