[libvirt] [PATCH 06/10] conf: Add helpers to insert/remove/find shmem devices in domain def
lhuang
lhuang at redhat.com
Thu Jul 9 03:44:30 UTC 2015
On 07/08/2015 08:14 PM, Martin Kletzander wrote:
> On Wed, Jun 17, 2015 at 11:56:17AM +0800, Luyao Huang wrote:
>> The helpers will be useful when implementing hotplug and coldplug of
>> shared memory devices.
>>
>> Signed-off-by: Luyao Huang <lhuang at redhat.com>
>> ---
>> src/conf/domain_conf.c | 61
>> ++++++++++++++++++++++++++++++++++++++++++++++++
>> src/conf/domain_conf.h | 7 ++++++
>> src/libvirt_private.syms | 3 +++
>> 3 files changed, 71 insertions(+)
>>
>> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
>> index 306b718..8a8e4f7 100644
>> --- a/src/conf/domain_conf.c
>> +++ b/src/conf/domain_conf.c
>> @@ -13343,6 +13343,67 @@ virDomainMemoryRemove(virDomainDefPtr def,
>> }
>>
>>
>> +int
>> +virDomainShmemInsert(virDomainDefPtr def,
>> + virDomainShmemDefPtr shmem)
>> +{
>> + return VIR_APPEND_ELEMENT(def->shmems, def->nshmems, shmem);
>> +}
>> +
>> +
>> +ssize_t
>> +virDomainShmemFind(virDomainDefPtr def,
>> + virDomainShmemDefPtr shmem)
>> +{
>> + size_t i;
>> +
>> + for (i = 0; i < def->nshmems; i++) {
>> + virDomainShmemDefPtr tmpshmem = def->shmems[i];
>> +
>> + if (STRNEQ_NULLABLE(shmem->name, tmpshmem->name))
>> + continue;
>> +
>
> I think that you shouldn't be able to have two <shmem/> elements in
> the same domain, and since the name is mandatory, STREQ() should be
> enough to check whether you need to return current 'i'.
>
Okay, i agree use STREQ() instead of STRNEQ_NULLABLE. BTW I think one
guest could have more than one <shmem/> element, maybe one is non-server
shmem and another is server shmem, it depends on how to use it.
> Well, depending on whether you are unplugging it (you want everything
> that was specified to match) or plugging it in (if there's the same
> name, just reject it).
>
Okay, we could just check the name if use the same shmem (both server
and non-server) in the same guest is a invalid case.
Thanks a lot for your review.
Luyao
>> + if (shmem->size != tmpshmem->size)
>> + continue;
>> +
>> + if (shmem->server.enabled != tmpshmem->server.enabled ||
>> + (shmem->server.enabled &&
>> + STRNEQ_NULLABLE(shmem->server.chr.data.nix.path,
>> + tmpshmem->server.chr.data.nix.path)))
>> + continue;
>> +
>> + if (shmem->msi.enabled != tmpshmem->msi.enabled ||
>> + (shmem->msi.enabled &&
>> + (shmem->msi.vectors != tmpshmem->msi.vectors ||
>> + shmem->msi.ioeventfd != tmpshmem->msi.ioeventfd)))
>> + continue;
>> +
>> + if (shmem->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE &&
>> + !virDomainDeviceInfoAddressIsEqual(&shmem->info, &tmpshmem->info))
>> + continue;
>> +
>> + break;
>> + }
>> +
>> + if (i < def->nshmems)
>> + return i;
>> +
>> + return -1;
>> +}
>> +
>> +
>> +virDomainShmemDefPtr
>> +virDomainShmemRemove(virDomainDefPtr def,
>> + size_t idx)
>> +{
>> + virDomainShmemDefPtr ret = def->shmems[idx];
>> +
>> + VIR_DELETE_ELEMENT(def->shmems, idx, def->nshmems);
>> +
>> + return ret;
>> +}
>> +
>> +
>> char *
>> virDomainDefGetDefaultEmulator(virDomainDefPtr def,
>> virCapsPtr caps)
>> diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
>> index a4b1bf3..39bc928 100644
>> --- a/src/conf/domain_conf.h
>> +++ b/src/conf/domain_conf.h
>> @@ -2943,6 +2943,13 @@ int
>> virDomainMemoryFindInactiveByDef(virDomainDefPtr def,
>> virDomainMemoryDefPtr mem)
>> ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
>>
>> +int virDomainShmemInsert(virDomainDefPtr def, virDomainShmemDefPtr
>> shmem)
>> + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
>> +ssize_t virDomainShmemFind(virDomainDefPtr def, virDomainShmemDefPtr
>> shmem)
>> + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
>> +virDomainShmemDefPtr virDomainShmemRemove(virDomainDefPtr def,
>> size_t idx)
>> + ATTRIBUTE_NONNULL(1);
>> +
>> VIR_ENUM_DECL(virDomainTaint)
>> VIR_ENUM_DECL(virDomainVirt)
>> VIR_ENUM_DECL(virDomainBoot)
>> diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
>> index 3ceb4e3..6127f51 100644
>> --- a/src/libvirt_private.syms
>> +++ b/src/libvirt_private.syms
>> @@ -439,6 +439,9 @@ virDomainSaveStatus;
>> virDomainSaveXML;
>> virDomainSeclabelTypeFromString;
>> virDomainSeclabelTypeToString;
>> +virDomainShmemFind;
>> +virDomainShmemInsert;
>> +virDomainShmemRemove;
>> virDomainShutdownReasonTypeFromString;
>> virDomainShutdownReasonTypeToString;
>> virDomainShutoffReasonTypeFromString;
>> --
>> 1.8.3.1
>>
>> --
>> libvir-list mailing list
>> libvir-list at redhat.com
>> https://www.redhat.com/mailman/listinfo/libvir-list
More information about the libvir-list
mailing list