|
|
127bba |
From 0f6a07209863beec18fb907b293531bd6c61f5d5 Mon Sep 17 00:00:00 2001
|
|
|
127bba |
Message-Id: <0f6a07209863beec18fb907b293531bd6c61f5d5@dist-git>
|
|
|
127bba |
From: Martin Kletzander <mkletzan@redhat.com>
|
|
|
127bba |
Date: Fri, 4 Nov 2016 10:29:52 +0100
|
|
|
127bba |
Subject: [PATCH] qemu: Save various defaults for shmem
|
|
|
127bba |
|
|
|
127bba |
We're keeping some things at default and that's not something we want to
|
|
|
127bba |
do intentionally. Let's save some sensible defaults upfront in order to
|
|
|
127bba |
avoid having problems later. The details for the defaults (of the newer
|
|
|
127bba |
implementation) can be found in qemu's commit 5400c02b90bb:
|
|
|
127bba |
|
|
|
127bba |
http://git.qemu.org/?p=qemu.git;a=commit;h=5400c02b90bb
|
|
|
127bba |
|
|
|
127bba |
Since we are merely saving the defaults it will not change the guest ABI
|
|
|
127bba |
and thanks to the fact that we're doing it in the PostParse callback it
|
|
|
127bba |
will not break the ABI stability checks.
|
|
|
127bba |
|
|
|
127bba |
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
|
|
|
127bba |
(cherry picked from commit acf0ec024a220364c4a6a94996c82875c6d1ba13)
|
|
|
127bba |
|
|
|
127bba |
https://bugzilla.redhat.com/show_bug.cgi?id=1392031
|
|
|
127bba |
|
|
|
127bba |
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
|
|
|
127bba |
---
|
|
|
127bba |
src/qemu/qemu_domain.c | 54 ++++++++++++++++++++++
|
|
|
127bba |
tests/qemuxml2argvdata/qemuxml2argv-shmem.args | 2 +-
|
|
|
127bba |
.../qemuxml2xmlout-shmem-plain-doorbell.xml | 5 +-
|
|
|
127bba |
tests/qemuxml2xmloutdata/qemuxml2xmlout-shmem.xml | 1 +
|
|
|
127bba |
4 files changed, 60 insertions(+), 2 deletions(-)
|
|
|
127bba |
|
|
|
127bba |
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
|
|
|
127bba |
index 4f99c14..3d2650f 100644
|
|
|
127bba |
--- a/src/qemu/qemu_domain.c
|
|
|
127bba |
+++ b/src/qemu/qemu_domain.c
|
|
|
127bba |
@@ -2544,6 +2544,56 @@ qemuDomainChrDefDropDefaultPath(virDomainChrDefPtr chr,
|
|
|
127bba |
|
|
|
127bba |
|
|
|
127bba |
static int
|
|
|
127bba |
+qemuDomainShmemDefPostParse(virDomainShmemDefPtr shm)
|
|
|
127bba |
+{
|
|
|
127bba |
+ /* This was the default since the introduction of this device. */
|
|
|
127bba |
+ if (shm->model != VIR_DOMAIN_SHMEM_MODEL_IVSHMEM_DOORBELL && !shm->size)
|
|
|
127bba |
+ shm->size = 4 << 20;
|
|
|
127bba |
+
|
|
|
127bba |
+ /* Nothing more to check/change for IVSHMEM */
|
|
|
127bba |
+ if (shm->model == VIR_DOMAIN_SHMEM_MODEL_IVSHMEM)
|
|
|
127bba |
+ return 0;
|
|
|
127bba |
+
|
|
|
127bba |
+ if (!shm->server.enabled) {
|
|
|
127bba |
+ if (shm->model == VIR_DOMAIN_SHMEM_MODEL_IVSHMEM_DOORBELL) {
|
|
|
127bba |
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
|
|
127bba |
+ _("shmem model '%s' is supported "
|
|
|
127bba |
+ "only with server option enabled"),
|
|
|
127bba |
+ virDomainShmemModelTypeToString(shm->model));
|
|
|
127bba |
+ return -1;
|
|
|
127bba |
+ }
|
|
|
127bba |
+
|
|
|
127bba |
+ if (shm->msi.enabled) {
|
|
|
127bba |
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
|
|
127bba |
+ _("shmem model '%s' doesn't support "
|
|
|
127bba |
+ "msi"),
|
|
|
127bba |
+ virDomainShmemModelTypeToString(shm->model));
|
|
|
127bba |
+ }
|
|
|
127bba |
+ } else {
|
|
|
127bba |
+ if (shm->model == VIR_DOMAIN_SHMEM_MODEL_IVSHMEM_PLAIN) {
|
|
|
127bba |
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
|
|
127bba |
+ _("shmem model '%s' is supported "
|
|
|
127bba |
+ "only with server option disabled"),
|
|
|
127bba |
+ virDomainShmemModelTypeToString(shm->model));
|
|
|
127bba |
+ return -1;
|
|
|
127bba |
+ }
|
|
|
127bba |
+
|
|
|
127bba |
+ if (shm->size) {
|
|
|
127bba |
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
|
|
127bba |
+ _("shmem model '%s' does not support size setting"),
|
|
|
127bba |
+ virDomainShmemModelTypeToString(shm->model));
|
|
|
127bba |
+ return -1;
|
|
|
127bba |
+ }
|
|
|
127bba |
+ shm->msi.enabled = true;
|
|
|
127bba |
+ if (!shm->msi.ioeventfd)
|
|
|
127bba |
+ shm->msi.ioeventfd = VIR_TRISTATE_SWITCH_ON;
|
|
|
127bba |
+ }
|
|
|
127bba |
+
|
|
|
127bba |
+ return 0;
|
|
|
127bba |
+}
|
|
|
127bba |
+
|
|
|
127bba |
+
|
|
|
127bba |
+static int
|
|
|
127bba |
qemuDomainDeviceDefPostParse(virDomainDeviceDefPtr dev,
|
|
|
127bba |
const virDomainDef *def,
|
|
|
127bba |
virCapsPtr caps ATTRIBUTE_UNUSED,
|
|
|
127bba |
@@ -2708,6 +2758,10 @@ qemuDomainDeviceDefPostParse(virDomainDeviceDefPtr dev,
|
|
|
127bba |
}
|
|
|
127bba |
}
|
|
|
127bba |
|
|
|
127bba |
+ if (dev->type == VIR_DOMAIN_DEVICE_SHMEM &&
|
|
|
127bba |
+ qemuDomainShmemDefPostParse(dev->data.shmem) < 0)
|
|
|
127bba |
+ goto cleanup;
|
|
|
127bba |
+
|
|
|
127bba |
ret = 0;
|
|
|
127bba |
|
|
|
127bba |
cleanup:
|
|
|
127bba |
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-shmem.args b/tests/qemuxml2argvdata/qemuxml2argv-shmem.args
|
|
|
127bba |
index 99fac11..bdf660a 100644
|
|
|
127bba |
--- a/tests/qemuxml2argvdata/qemuxml2argv-shmem.args
|
|
|
127bba |
+++ b/tests/qemuxml2argvdata/qemuxml2argv-shmem.args
|
|
|
127bba |
@@ -17,7 +17,7 @@ QEMU_AUDIO_DRV=none \
|
|
|
127bba |
-no-acpi \
|
|
|
127bba |
-boot c \
|
|
|
127bba |
-usb \
|
|
|
127bba |
--device ivshmem,id=shmem0,shm=shmem0,bus=pci.0,addr=0x3 \
|
|
|
127bba |
+-device ivshmem,id=shmem0,size=4m,shm=shmem0,bus=pci.0,addr=0x3 \
|
|
|
127bba |
-device ivshmem,id=shmem1,size=128m,shm=shmem1,bus=pci.0,addr=0x5 \
|
|
|
127bba |
-device ivshmem,id=shmem2,size=256m,shm=shmem2,bus=pci.0,addr=0x4 \
|
|
|
127bba |
-device ivshmem,id=shmem3,size=512m,chardev=charshmem3,bus=pci.0,addr=0x6 \
|
|
|
127bba |
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-shmem-plain-doorbell.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-shmem-plain-doorbell.xml
|
|
|
127bba |
index ab9c69b..7872e1c 100644
|
|
|
127bba |
--- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-shmem-plain-doorbell.xml
|
|
|
127bba |
+++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-shmem-plain-doorbell.xml
|
|
|
127bba |
@@ -23,6 +23,7 @@
|
|
|
127bba |
<memballoon model='none'/>
|
|
|
127bba |
<shmem name='shmem0'>
|
|
|
127bba |
<model type='ivshmem-plain'/>
|
|
|
127bba |
+ <size unit='M'>4</size>
|
|
|
127bba |
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
|
|
|
127bba |
</shmem>
|
|
|
127bba |
<shmem name='shmem1'>
|
|
|
127bba |
@@ -38,11 +39,13 @@
|
|
|
127bba |
<shmem name='shmem3'>
|
|
|
127bba |
<model type='ivshmem-doorbell'/>
|
|
|
127bba |
<server/>
|
|
|
127bba |
+ <msi ioeventfd='on'/>
|
|
|
127bba |
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
|
|
|
127bba |
</shmem>
|
|
|
127bba |
<shmem name='shmem4'>
|
|
|
127bba |
<model type='ivshmem-doorbell'/>
|
|
|
127bba |
<server path='/tmp/shmem4-sock'/>
|
|
|
127bba |
+ <msi ioeventfd='on'/>
|
|
|
127bba |
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
|
|
|
127bba |
</shmem>
|
|
|
127bba |
<shmem name='shmem5'>
|
|
|
127bba |
@@ -54,7 +57,7 @@
|
|
|
127bba |
<shmem name='shmem6'>
|
|
|
127bba |
<model type='ivshmem-doorbell'/>
|
|
|
127bba |
<server path='/tmp/shmem6-sock'/>
|
|
|
127bba |
- <msi vectors='16'/>
|
|
|
127bba |
+ <msi vectors='16' ioeventfd='on'/>
|
|
|
127bba |
<address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
|
|
|
127bba |
</shmem>
|
|
|
127bba |
<shmem name='shmem7'>
|
|
|
127bba |
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-shmem.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-shmem.xml
|
|
|
127bba |
index 5602913..04b463a 100644
|
|
|
127bba |
--- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-shmem.xml
|
|
|
127bba |
+++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-shmem.xml
|
|
|
127bba |
@@ -23,6 +23,7 @@
|
|
|
127bba |
<memballoon model='none'/>
|
|
|
127bba |
<shmem name='shmem0'>
|
|
|
127bba |
<model type='ivshmem'/>
|
|
|
127bba |
+ <size unit='M'>4</size>
|
|
|
127bba |
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
|
|
|
127bba |
</shmem>
|
|
|
127bba |
<shmem name='shmem1'>
|
|
|
127bba |
--
|
|
|
127bba |
2.10.2
|
|
|
127bba |
|