diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
index 10a692de25531c15576758062b791bde33b3af33..11b3330cee870da27c2f606fff4a1d3e3598163e 100644
--- a/docs/formatdomain.html.in
+++ b/docs/formatdomain.html.in
@@ -6826,10 +6826,11 @@ qemu-kvm -net nic,model=? /dev/null
...
<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'/>
@@ -6848,8 +6849,11 @@ qemu-kvm -net nic,model=? /dev/null
Attribute type
of the optional element model
specifies the model of the underlying device providing the
- shmem
device. Currently the only supported model is
- ivshmem
.
+ shmem
device. The models currently supported are
+ ivshmem
(supports both server and server-less shmem, but is
+ deprecated by newer QEMU in favour of the -plain and -doorbell variants),
+ ivshmem-plain
(only for server-less shmem) and
+ ivshmem-doorbell
(only for shmem with the server).
size
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index 99e0eb6cb448bcb1d9943d4d4a4f7337609740ef..19d45fd6eae3fe4ca99893e4d52c433ca5d528e4 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -3596,6 +3596,8 @@
ivshmem
+ ivshmem-plain
+ ivshmem-doorbell
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 108a48ee974ed743cd0ddada089defe1655c46e2..a233c0c4208a268e60c35a22a2480142e11ff65e 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -845,7 +845,9 @@ VIR_ENUM_IMPL(virDomainMemoryModel, VIR_DOMAIN_MEMORY_MODEL_LAST,
"", "dimm")
VIR_ENUM_IMPL(virDomainShmemModel, VIR_DOMAIN_SHMEM_MODEL_LAST,
- "ivshmem")
+ "ivshmem",
+ "ivshmem-plain",
+ "ivshmem-doorbell")
static virClassPtr virDomainObjClass;
static virClassPtr virDomainXMLOptionClass;
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index d2a9289e077d330c467ee40e9070b761ec111cf3..541b6003c87e0ea12f3513e8b00996fd5b561401 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -1564,6 +1564,8 @@ struct _virDomainNVRAMDef {
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;
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 5ed288c02a93181c9e4f0b0fc98fac67b630bb05..d6a5f442465639c8b20e16de00cb15dc4ed00616 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -8530,6 +8530,13 @@ qemuBuildShmemCommandLine(virLogManagerPtr logManager,
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;
}
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-shmem-plain-doorbell.xml b/tests/qemuxml2argvdata/qemuxml2argv-shmem-plain-doorbell.xml
new file mode 100644
index 0000000000000000000000000000000000000000..454437cbdb391166fca1c9ba073a5d0d84826d7c
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-shmem-plain-doorbell.xml
@@ -0,0 +1,58 @@
+
+ QEMUGuest1
+ c7a5fdbd-edaf-9455-926a-d65c16db1809
+ 219136
+ 219136
+ 1
+
+ hvm
+
+
+
+ destroy
+ restart
+ destroy
+
+ /usr/bin/qemu
+
+
+
+
+
+
+
+
+
+
+ 128
+
+
+
+ 256
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-shmem-plain-doorbell.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-shmem-plain-doorbell.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ab9c69bfccd4c685483aef7132fd9c539b6b57b2
--- /dev/null
+++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-shmem-plain-doorbell.xml
@@ -0,0 +1,67 @@
+
+ QEMUGuest1
+ c7a5fdbd-edaf-9455-926a-d65c16db1809
+ 219136
+ 219136
+ 1
+
+ hvm
+
+
+
+ destroy
+ restart
+ destroy
+
+ /usr/bin/qemu
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 128
+
+
+
+
+ 256
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
index 496ed130f838627de3f99e7ee36fad4fde008de4..8a2b5ff842fce1ab272895d7aeec70d9feeda11e 100644
--- a/tests/qemuxml2xmltest.c
+++ b/tests/qemuxml2xmltest.c
@@ -822,6 +822,7 @@ mymain(void)
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);