[libvirt] [PATCH 09/20] qemu: Save various defaults for shmem
Martin Kletzander
mkletzan at redhat.com
Fri Sep 16 14:18:32 UTC 2016
On Fri, Sep 16, 2016 at 10:32:48AM +0200, Peter Krempa wrote:
>On Thu, Sep 15, 2016 at 18:14:34 +0200, Martin Kletzander wrote:
>> When we change the device used for the shared memory, it should not
>> change the settings, so rather save them upfront then having problems
>> later.
>>
>> The only thing we are not saving is the role for old ivshmem and that's
>> because we were not specifying it, which means role=auto and that is
>> really bad idea to be using (due to various things). However, we don't
>> want to change the behaviour, so that's the reason for that.
>>
>> 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
>>
>> Signed-off-by: Martin Kletzander <mkletzan at redhat.com>
>> ---
>> src/qemu/qemu_domain.c | 33 +++++++++++++++++++++++
>> tests/qemuxml2argvdata/qemuxml2argv-shmem.args | 2 +-
>> tests/qemuxml2xmloutdata/qemuxml2xmlout-shmem.xml | 3 ++-
>> 3 files changed, 36 insertions(+), 2 deletions(-)
>>
>> diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
>> index 3f16dbee2e6a..1fdbdf68fc8b 100644
>> --- a/src/qemu/qemu_domain.c
>> +++ b/src/qemu/qemu_domain.c
>> @@ -2747,6 +2747,39 @@ qemuDomainDeviceDefPostParse(virDomainDeviceDefPtr dev,
>> }
>> }
>>
>> + if (dev->type == VIR_DOMAIN_DEVICE_SHMEM) {
>> + if (!dev->data.shmem->server.enabled) {
>> + /* The size is 4M if not specified */
>> + if (!dev->data.shmem->size)
>> + dev->data.shmem->size = 4 << 20;
>> + /* For old ivshmem we shouldn't change the role, the new
>> + * ones are peer by default, mostly to safeguard that
>> + * there should be no more than one master */
>> + if (!dev->data.shmem->role) {
>> + if (dev->data.shmem->model == VIR_DOMAIN_SHMEM_MODEL_IVSHMEM)
>> + dev->data.shmem->role = VIR_DOMAIN_SHMEM_ROLE_MASTER;
>> + else
>> + dev->data.shmem->role = VIR_DOMAIN_SHMEM_ROLE_PEER;
>> + }
>> + } else {
>> + /* In QEMU, role doesn't make sense for server-side shmem */
>> + dev->data.shmem->role = VIR_DOMAIN_SHMEM_ROLE_DEFAULT;
>
>Shouldn't this be VIR_DOMAIN_SHMEM_ROLE_PEER?
>
No, this should be DEFAULT, just the naming is weird. Doorbell has no
roles (e.g. no 'master' parameter) and "DEFAULT" should actually be
called "NONE".
>> +
>> + /* Defaults/Requirements for the newer device that we should save */
>> + if (dev->data.shmem->model == VIR_DOMAIN_SHMEM_MODEL_IVSHMEM_DOORBELL) {
>> + /* Size does not make much sense when claiming memory from
>> + * the server and so the newer version doesn't support that */
>> + dev->data.shmem->size = 0;
>> +
>> + /* Also they can only exist with MSI and ioeventfd is
>> + * enabled unless specifically disabled */
>> + dev->data.shmem->msi.enabled = true;
>> + if (!dev->data.shmem->msi.ioeventfd)
>> + dev->data.shmem->msi.ioeventfd = VIR_TRISTATE_SWITCH_ON;
>
>This does not tweak the number of ioeventfd vectors, which will probably
>remain 0.
>
Default is 1, we can configure that if someone wants that in the future.
>> + }
>> + }
>> + }
>
>The above code does not check the following two incompatible configs:
>1) device is VIR_DOMAIN_SHMEM_MODEL_IVSHMEM_PLAIN and server is enabled
>2) device is VIR_DOMAIN_SHMEM_MODEL_IVSHMEM_DOORBELL and server is disabled
>
I'll move those checks here as you suggested in some other patch.
>> +
>> ret = 0;
>>
>
>Peter
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20160916/d353afbf/attachment-0001.sig>
More information about the libvir-list
mailing list