[libvirt] [PATCHv3 10/12] qemu: conf: Add support for memory device cold(un)plug

John Ferlan jferlan at redhat.com
Thu Mar 19 22:39:50 UTC 2015



On 03/18/2015 01:51 AM, Zhu Guihua wrote:
> 
> On 03/17/2015 10:19 PM, Peter Krempa wrote:
>> Add a few helpers that allow to operate with memory device definitions
>> on the domain config and use them to implement memory device coldplug in
>> the qemu driver.
>> ---
>>
>> Notes:
>>      Version 2:
>>      - no changes
>>
>>   src/conf/domain_conf.c   | 100
>> +++++++++++++++++++++++++++++++++++++++++++++++
>>   src/conf/domain_conf.h   |  10 +++++
>>   src/libvirt_private.syms |   4 ++
>>   src/qemu/qemu_driver.c   |  15 ++++++-
>>   4 files changed, 127 insertions(+), 2 deletions(-)
>>
>> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
>> index 8c2234f..1a02e46 100644
>> --- a/src/conf/domain_conf.c
>> +++ b/src/conf/domain_conf.c
>> @@ -12811,6 +12811,106 @@ virDomainRNGRemove(virDomainDefPtr def,
>>   }
>>
>>
>> +static int
>> +virDomainMemoryFindByDefInternal(virDomainDefPtr def,
>> +                                 virDomainMemoryDefPtr mem,
>> +                                 bool allowAddressFallback)
>> +{
>> +    size_t i;
>> +
>> +    for (i = 0; i < def->nmems; i++) {
>> +        virDomainMemoryDefPtr tmp = def->mems[i];
>> +
>> +        /* address, if present */
>> +        if (allowAddressFallback) {
>> +            if (tmp->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE)
>> +                continue;
>> +        } else {
>> +            if (mem->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE &&
>> +                !virDomainDeviceInfoAddressIsEqual(&tmp->info,
>> &mem->info))
>> +                continue;
>> +        }
>> +
>> +        /* alias, if present */
>> +        if (mem->info.alias &&
>> +            STRNEQ_NULLABLE(tmp->info.alias, mem->info.alias))
>> +            continue;
>> +
>> +        /* target info -> always present */
>> +        if (tmp->model != mem->model ||
>> +            tmp->targetNode != mem->targetNode ||
>> +            tmp->size != mem->size)
> 
> I have tested your series with our qemu memory hot remove patch series,
> here would be a possible error.
> 
> When hotplug a memory device, its size has been aligned. So the compare for
> size here would fail possiblely.
> 

hmm.. Not sure that's necessary - although Peter can make the final
determination... Commit id '57b215a' doesn't modify each def->mems[i]
entry in qemuDomainAlignMemorySizes, rather it gets a value from
virDomainDefSetMemoryInitial and then does the rounding.

If the stored def->mems[i]->size value is/was modified, then I'd agree,
but it doesn't appear to be that way.

If there is a rounding of the value - then please just point it out

John

> Thanks,
> Zhu
> 
>> +            continue;
>> +
>> +        /* source stuff -> match with device */
>> +        if (tmp->pagesize != mem->pagesize)
>> +            continue;
>> +
>> +        if (!virBitmapEqual(tmp->sourceNodes, mem->sourceNodes))
>> +            continue;
>> +
>> +        break;
>> +    }
>> +
>> +    if (i == def->nmems)
>> +        return -1;
>> +
>> +    return i;
>> +}
>> +
>> +
>> +int
>> +virDomainMemoryFindByDef(virDomainDefPtr def,
>> +                         virDomainMemoryDefPtr mem)
>> +{
>> +    return virDomainMemoryFindByDefInternal(def, mem, false);
>> +}
>> +
> [...]
> 
> -- 
> 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