From 3c06aa7b30e91920698368ceb87c49aab06e37fe Mon Sep 17 00:00:00 2001 From: Martin Kletzander Date: Fri, 19 Aug 2016 14:58:35 +0200 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 --- 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 10a692de25..11b3330cee 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 99e0eb6cb4..19d45fd6ea 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 108a48ee97..a233c0c420 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 d2a9289e07..541b6003c8 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 5ed288c02a..d6a5f44246 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 0000000000..454437cbdb --- /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 0000000000..ab9c69bfcc --- /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 496ed130f8..8a2b5ff842 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); -- GitLab