...
<devices>
<shmem name='my_shmem0'>
+ <model type='ivshmem-plain'/>
<size unit='M'>4</size>
</shmem>
<shmem name='shmem_server'>
- <model type='ivshmem'/>
+ <model type='ivshmem-doorbell'/>
<size unit='M'>2</size>
<server path='/tmp/socket-shmem'/>
<msi vectors='32' ioeventfd='on'/>
<dd>
Attribute <code>type</code> of the optional element <code>model</code>
specifies the model of the underlying device providing the
- <code>shmem</code> device. Currently the only supported model is
- <code>ivshmem</code>.
+ <code>shmem</code> device. The models currently supported are
+ <code>ivshmem</code> (supports both server and server-less shmem, but is
+ deprecated by newer QEMU in favour of the -plain and -doorbell variants),
+ <code>ivshmem-plain</code> (only for server-less shmem) and
+ <code>ivshmem-doorbell</code> (only for shmem with the server).
</dd>
<dt><code>size</code></dt>
<dd>
<attribute name="type">
<choice>
<value>ivshmem</value>
+ <value>ivshmem-plain</value>
+ <value>ivshmem-doorbell</value>
</choice>
</attribute>
</element>
"", "dimm")
VIR_ENUM_IMPL(virDomainShmemModel, VIR_DOMAIN_SHMEM_MODEL_LAST,
- "ivshmem")
+ "ivshmem",
+ "ivshmem-plain",
+ "ivshmem-doorbell")
static virClassPtr virDomainObjClass;
static virClassPtr virDomainXMLOptionClass;
typedef enum {
VIR_DOMAIN_SHMEM_MODEL_IVSHMEM,
+ VIR_DOMAIN_SHMEM_MODEL_IVSHMEM_PLAIN,
+ VIR_DOMAIN_SHMEM_MODEL_IVSHMEM_DOORBELL,
VIR_DOMAIN_SHMEM_MODEL_LAST
} virDomainShmemModel;
devstr = qemuBuildShmemDevLegacyStr(def, shmem, qemuCaps);
break;
+ case VIR_DOMAIN_SHMEM_MODEL_IVSHMEM_PLAIN:
+ case VIR_DOMAIN_SHMEM_MODEL_IVSHMEM_DOORBELL:
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("%s device is not supported with this QEMU binary"),
+ virDomainShmemModelTypeToString(shmem->model));
+ break;
+
case VIR_DOMAIN_SHMEM_MODEL_LAST:
break;
}
--- /dev/null
+<domain type='qemu'>
+ <name>QEMUGuest1</name>
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+ <memory unit='KiB'>219136</memory>
+ <currentMemory unit='KiB'>219136</currentMemory>
+ <vcpu placement='static'>1</vcpu>
+ <os>
+ <type arch='i686' machine='pc'>hvm</type>
+ <boot dev='hd'/>
+ </os>
+ <clock offset='utc'/>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <devices>
+ <emulator>/usr/bin/qemu</emulator>
+ <controller type='usb' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
+ <input type='mouse' bus='ps2'/>
+ <input type='keyboard' bus='ps2'/>
+ <memballoon model='none'/>
+ <shmem name='shmem0'>
+ <model type='ivshmem-plain'/>
+ </shmem>
+ <shmem name='shmem1'>
+ <model type='ivshmem-plain'/>
+ <size unit='M'>128</size>
+ </shmem>
+ <shmem name='shmem2'>
+ <model type='ivshmem-plain'/>
+ <size unit='M'>256</size>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
+ </shmem>
+ <shmem name='shmem3'>
+ <model type='ivshmem-doorbell'/>
+ <server/>
+ </shmem>
+ <shmem name='shmem4'>
+ <model type='ivshmem-doorbell'/>
+ <server path='/tmp/shmem4-sock'/>
+ </shmem>
+ <shmem name='shmem5'>
+ <model type='ivshmem-doorbell'/>
+ <server path='/tmp/shmem5-sock'/>
+ <msi ioeventfd='off'/>
+ </shmem>
+ <shmem name='shmem6'>
+ <model type='ivshmem-doorbell'/>
+ <server path='/tmp/shmem6-sock'/>
+ <msi vectors='16'/>
+ </shmem>
+ <shmem name='shmem7'>
+ <model type='ivshmem-doorbell'/>
+ <server path='/tmp/shmem7-sock'/>
+ <msi vectors='32' ioeventfd='on'/>
+ </shmem>
+ </devices>
+</domain>
--- /dev/null
+<domain type='qemu'>
+ <name>QEMUGuest1</name>
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+ <memory unit='KiB'>219136</memory>
+ <currentMemory unit='KiB'>219136</currentMemory>
+ <vcpu placement='static'>1</vcpu>
+ <os>
+ <type arch='i686' machine='pc'>hvm</type>
+ <boot dev='hd'/>
+ </os>
+ <clock offset='utc'/>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <devices>
+ <emulator>/usr/bin/qemu</emulator>
+ <controller type='usb' index='0'>
+ <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'/>
+ <memballoon model='none'/>
+ <shmem name='shmem0'>
+ <model type='ivshmem-plain'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
+ </shmem>
+ <shmem name='shmem1'>
+ <model type='ivshmem-plain'/>
+ <size unit='M'>128</size>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
+ </shmem>
+ <shmem name='shmem2'>
+ <model type='ivshmem-plain'/>
+ <size unit='M'>256</size>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
+ </shmem>
+ <shmem name='shmem3'>
+ <model type='ivshmem-doorbell'/>
+ <server/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
+ </shmem>
+ <shmem name='shmem4'>
+ <model type='ivshmem-doorbell'/>
+ <server path='/tmp/shmem4-sock'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
+ </shmem>
+ <shmem name='shmem5'>
+ <model type='ivshmem-doorbell'/>
+ <server path='/tmp/shmem5-sock'/>
+ <msi ioeventfd='off'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
+ </shmem>
+ <shmem name='shmem6'>
+ <model type='ivshmem-doorbell'/>
+ <server path='/tmp/shmem6-sock'/>
+ <msi vectors='16'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
+ </shmem>
+ <shmem name='shmem7'>
+ <model type='ivshmem-doorbell'/>
+ <server path='/tmp/shmem7-sock'/>
+ <msi vectors='32' ioeventfd='on'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
+ </shmem>
+ </devices>
+</domain>
DO_TEST("tap-vhost", NONE);
DO_TEST("tap-vhost-incorrect", NONE);
DO_TEST("shmem", NONE);
+ DO_TEST("shmem-plain-doorbell", NONE);
DO_TEST("smbios", NONE);
DO_TEST("smbios-multiple-type2", NONE);