提交 acf0ec02 编写于 作者: M Martin Kletzander

qemu: Save various defaults for shmem

We're keeping some things at default and that's not something we want to
do intentionally.  Let's save some sensible defaults upfront in order to
avoid having problems later.  The details for the defaults (of the newer
implementation) can be found in qemu's commit 5400c02b90bb:

  http://git.qemu.org/?p=qemu.git;a=commit;h=5400c02b90bb

Since we are merely saving the defaults it will not change the guest ABI
and thanks to the fact that we're doing it in the PostParse callback it
will not break the ABI stability checks.
Signed-off-by: NMartin Kletzander <mkletzan@redhat.com>
上级 22d94ca4
...@@ -2843,6 +2843,56 @@ qemuDomainChrDefDropDefaultPath(virDomainChrDefPtr chr, ...@@ -2843,6 +2843,56 @@ qemuDomainChrDefDropDefaultPath(virDomainChrDefPtr chr,
} }
static int
qemuDomainShmemDefPostParse(virDomainShmemDefPtr shm)
{
/* This was the default since the introduction of this device. */
if (shm->model != VIR_DOMAIN_SHMEM_MODEL_IVSHMEM_DOORBELL && !shm->size)
shm->size = 4 << 20;
/* Nothing more to check/change for IVSHMEM */
if (shm->model == VIR_DOMAIN_SHMEM_MODEL_IVSHMEM)
return 0;
if (!shm->server.enabled) {
if (shm->model == VIR_DOMAIN_SHMEM_MODEL_IVSHMEM_DOORBELL) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("shmem model '%s' is supported "
"only with server option enabled"),
virDomainShmemModelTypeToString(shm->model));
return -1;
}
if (shm->msi.enabled) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("shmem model '%s' doesn't support "
"msi"),
virDomainShmemModelTypeToString(shm->model));
}
} else {
if (shm->model == VIR_DOMAIN_SHMEM_MODEL_IVSHMEM_PLAIN) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("shmem model '%s' is supported "
"only with server option disabled"),
virDomainShmemModelTypeToString(shm->model));
return -1;
}
if (shm->size) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("shmem model '%s' does not support size setting"),
virDomainShmemModelTypeToString(shm->model));
return -1;
}
shm->msi.enabled = true;
if (!shm->msi.ioeventfd)
shm->msi.ioeventfd = VIR_TRISTATE_SWITCH_ON;
}
return 0;
}
static int static int
qemuDomainDeviceDefPostParse(virDomainDeviceDefPtr dev, qemuDomainDeviceDefPostParse(virDomainDeviceDefPtr dev,
const virDomainDef *def, const virDomainDef *def,
...@@ -3047,6 +3097,10 @@ qemuDomainDeviceDefPostParse(virDomainDeviceDefPtr dev, ...@@ -3047,6 +3097,10 @@ qemuDomainDeviceDefPostParse(virDomainDeviceDefPtr dev,
} }
} }
if (dev->type == VIR_DOMAIN_DEVICE_SHMEM &&
qemuDomainShmemDefPostParse(dev->data.shmem) < 0)
goto cleanup;
ret = 0; ret = 0;
cleanup: cleanup:
......
...@@ -17,7 +17,7 @@ QEMU_AUDIO_DRV=none \ ...@@ -17,7 +17,7 @@ QEMU_AUDIO_DRV=none \
-no-acpi \ -no-acpi \
-boot c \ -boot c \
-usb \ -usb \
-device ivshmem,id=shmem0,shm=shmem0,bus=pci.0,addr=0x3 \ -device ivshmem,id=shmem0,size=4m,shm=shmem0,bus=pci.0,addr=0x3 \
-device ivshmem,id=shmem1,size=128m,shm=shmem1,bus=pci.0,addr=0x5 \ -device ivshmem,id=shmem1,size=128m,shm=shmem1,bus=pci.0,addr=0x5 \
-device ivshmem,id=shmem2,size=256m,shm=shmem2,bus=pci.0,addr=0x4 \ -device ivshmem,id=shmem2,size=256m,shm=shmem2,bus=pci.0,addr=0x4 \
-device ivshmem,id=shmem3,size=512m,chardev=charshmem3,bus=pci.0,addr=0x6 \ -device ivshmem,id=shmem3,size=512m,chardev=charshmem3,bus=pci.0,addr=0x6 \
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
<memballoon model='none'/> <memballoon model='none'/>
<shmem name='shmem0'> <shmem name='shmem0'>
<model type='ivshmem-plain'/> <model type='ivshmem-plain'/>
<size unit='M'>4</size>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</shmem> </shmem>
<shmem name='shmem1'> <shmem name='shmem1'>
...@@ -38,11 +39,13 @@ ...@@ -38,11 +39,13 @@
<shmem name='shmem3'> <shmem name='shmem3'>
<model type='ivshmem-doorbell'/> <model type='ivshmem-doorbell'/>
<server/> <server/>
<msi ioeventfd='on'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</shmem> </shmem>
<shmem name='shmem4'> <shmem name='shmem4'>
<model type='ivshmem-doorbell'/> <model type='ivshmem-doorbell'/>
<server path='/tmp/shmem4-sock'/> <server path='/tmp/shmem4-sock'/>
<msi ioeventfd='on'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
</shmem> </shmem>
<shmem name='shmem5'> <shmem name='shmem5'>
...@@ -54,7 +57,7 @@ ...@@ -54,7 +57,7 @@
<shmem name='shmem6'> <shmem name='shmem6'>
<model type='ivshmem-doorbell'/> <model type='ivshmem-doorbell'/>
<server path='/tmp/shmem6-sock'/> <server path='/tmp/shmem6-sock'/>
<msi vectors='16'/> <msi vectors='16' ioeventfd='on'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
</shmem> </shmem>
<shmem name='shmem7'> <shmem name='shmem7'>
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
<memballoon model='none'/> <memballoon model='none'/>
<shmem name='shmem0'> <shmem name='shmem0'>
<model type='ivshmem'/> <model type='ivshmem'/>
<size unit='M'>4</size>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</shmem> </shmem>
<shmem name='shmem1'> <shmem name='shmem1'>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册