From 1a9572f07ac3c181166e3c67b179716d5830134c Mon Sep 17 00:00:00 2001 Message-Id: <1a9572f07ac3c181166e3c67b179716d5830134c@dist-git> From: Martin Kletzander Date: Fri, 4 Nov 2016 10:29:50 +0100 Subject: [PATCH] conf, qemu: Add newer shmem models The old ivshmem is deprecated in QEMU, so let's use the better ivshmem-{plain,doorbell} variants instead. Signed-off-by: Martin Kletzander (cherry picked from commit 3c06aa7b30e91920698368ceb87c49aab06e37fe) Conflicts: tests/qemuxml2xmltest.c -- DO_TEST rewrite https://bugzilla.redhat.com/show_bug.cgi?id=1392031 Signed-off-by: Martin Kletzander --- docs/formatdomain.html.in | 10 +++- docs/schemas/domaincommon.rng | 2 + src/conf/domain_conf.c | 4 +- src/conf/domain_conf.h | 2 + src/qemu/qemu_command.c | 7 +++ .../qemuxml2argv-shmem-plain-doorbell.xml | 58 +++++++++++++++++++ .../qemuxml2xmlout-shmem-plain-doorbell.xml | 67 ++++++++++++++++++++++ tests/qemuxml2xmltest.c | 1 + 8 files changed, 147 insertions(+), 4 deletions(-) create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-shmem-plain-doorbell.xml create mode 100644 tests/qemuxml2xmloutdata/qemuxml2xmlout-shmem-plain-doorbell.xml diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index a39d730..e9b7bad 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -6686,10 +6686,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'/> @@ -6708,8 +6709,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 7d16536..6acc107 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -3557,6 +3557,8 @@ ivshmem + ivshmem-plain + ivshmem-doorbell diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 25b1c63..514e50d 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -841,7 +841,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 db74d1d..b8944cb 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -1551,6 +1551,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 c5d29b4..e145c9f 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -8564,6 +8564,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 0000000..454437c --- /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 0000000..ab9c69b --- /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 5458361..c6bf7ad 100644 --- a/tests/qemuxml2xmltest.c +++ b/tests/qemuxml2xmltest.c @@ -827,6 +827,7 @@ mymain(void) DO_TEST("tap-vhost"); DO_TEST("tap-vhost-incorrect"); DO_TEST("shmem"); + DO_TEST("shmem-plain-doorbell"); DO_TEST("smbios"); DO_TEST("smbios-multiple-type2"); -- 2.10.2