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

Zhu Guihua zhugh.fnst at cn.fujitsu.com
Fri Mar 20 01:03:22 UTC 2015


On 03/20/2015 06:39 AM, John Ferlan wrote:
>
> 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

Yes, the stored def->mems[i]->size value was modified.
If you assign the size 524287 KiB, the stored value will be 524288.

Thanks,
Zhu

>
> 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