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);