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: Martin Kletzander <mkletzan@redhat.com>
This commit is contained in:
Martin Kletzander 2016-08-03 17:34:51 +02:00
parent 22d94ca46d
commit acf0ec024a
4 changed files with 60 additions and 2 deletions

View File

@ -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
qemuDomainDeviceDefPostParse(virDomainDeviceDefPtr dev,
const virDomainDef *def,
@ -3047,6 +3097,10 @@ qemuDomainDeviceDefPostParse(virDomainDeviceDefPtr dev,
}
}
if (dev->type == VIR_DOMAIN_DEVICE_SHMEM &&
qemuDomainShmemDefPostParse(dev->data.shmem) < 0)
goto cleanup;
ret = 0;
cleanup:

View File

@ -17,7 +17,7 @@ QEMU_AUDIO_DRV=none \
-no-acpi \
-boot c \
-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=shmem2,size=256m,shm=shmem2,bus=pci.0,addr=0x4 \
-device ivshmem,id=shmem3,size=512m,chardev=charshmem3,bus=pci.0,addr=0x6 \

View File

@ -23,6 +23,7 @@
<memballoon model='none'/>
<shmem name='shmem0'>
<model type='ivshmem-plain'/>
<size unit='M'>4</size>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</shmem>
<shmem name='shmem1'>
@ -38,11 +39,13 @@
<shmem name='shmem3'>
<model type='ivshmem-doorbell'/>
<server/>
<msi ioeventfd='on'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</shmem>
<shmem name='shmem4'>
<model type='ivshmem-doorbell'/>
<server path='/tmp/shmem4-sock'/>
<msi ioeventfd='on'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
</shmem>
<shmem name='shmem5'>
@ -54,7 +57,7 @@
<shmem name='shmem6'>
<model type='ivshmem-doorbell'/>
<server path='/tmp/shmem6-sock'/>
<msi vectors='16'/>
<msi vectors='16' ioeventfd='on'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
</shmem>
<shmem name='shmem7'>

View File

@ -23,6 +23,7 @@
<memballoon model='none'/>
<shmem name='shmem0'>
<model type='ivshmem'/>
<size unit='M'>4</size>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</shmem>
<shmem name='shmem1'>