[libvirt] [PATCHv2 2/4] qemu: Implement shared memory device cold (un)plug

lhuang lhuang at redhat.com
Tue Dec 15 08:45:11 UTC 2015



On 12/10/2015 08:53 AM, John Ferlan wrote:
>
> On 11/26/2015 04:06 AM, Luyao Huang wrote:
>> Add support for using the attach/detach device APIs on the inactive
>> configuration to add/del shared memory devices.
>>
>> Signed-off-by: Luyao Huang <lhuang at redhat.com>
>> ---
>>   src/libvirt_private.syms |  1 +
>>   src/qemu/qemu_driver.c   | 21 +++++++++++++++++++--
>>   2 files changed, 20 insertions(+), 2 deletions(-)
>>
>> diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
>> index 88c2c53..c89d27a 100644
>> --- a/src/libvirt_private.syms
>> +++ b/src/libvirt_private.syms
>> @@ -451,6 +451,7 @@ virDomainSaveStatus;
>>   virDomainSaveXML;
>>   virDomainSeclabelTypeFromString;
>>   virDomainSeclabelTypeToString;
>> +virDomainShmemDefFree;
>>   virDomainShmemFind;
>>   virDomainShmemInsert;
>>   virDomainShmemRemove;
>> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
>> index 65ccf99..5ded9ef 100644
>> --- a/src/qemu/qemu_driver.c
>> +++ b/src/qemu/qemu_driver.c
>> @@ -8174,6 +8174,15 @@ qemuDomainAttachDeviceConfig(virQEMUCapsPtr qemuCaps,
>>           dev->data.memory = NULL;
>>           break;
>>   
>> +    case VIR_DOMAIN_DEVICE_SHMEM:
>> +        if (virDomainShmemInsert(vmdef, dev->data.shmem) < 0)
>> +            return -1;
>> +        dev->data.shmem = NULL;
>> +
>> +        if (qemuDomainAssignAddresses(vmdef, qemuCaps, NULL) < 0)
>> +            return -1;
>> +        break;
>> +
>>       case VIR_DOMAIN_DEVICE_INPUT:
>>       case VIR_DOMAIN_DEVICE_SOUND:
>>       case VIR_DOMAIN_DEVICE_VIDEO:
>> @@ -8183,7 +8192,6 @@ qemuDomainAttachDeviceConfig(virQEMUCapsPtr qemuCaps,
>>       case VIR_DOMAIN_DEVICE_SMARTCARD:
>>       case VIR_DOMAIN_DEVICE_MEMBALLOON:
>>       case VIR_DOMAIN_DEVICE_NVRAM:
>> -    case VIR_DOMAIN_DEVICE_SHMEM:
>>       case VIR_DOMAIN_DEVICE_REDIRDEV:
>>       case VIR_DOMAIN_DEVICE_NONE:
>>       case VIR_DOMAIN_DEVICE_TPM:
>> @@ -8310,6 +8318,16 @@ qemuDomainDetachDeviceConfig(virDomainDefPtr vmdef,
>>           virDomainMemoryDefFree(virDomainMemoryRemove(vmdef, idx));
>>           break;
>>   
>> +    case VIR_DOMAIN_DEVICE_SHMEM:
>> +        if ((idx = virDomainShmemFind(vmdef, dev->data.shmem, true)) < 0) {
> Here rather than 'true' which to me only has meaning if I go read the
> code... Of course same thing holds true when passing a 0 (zero) flags value.
>
> BTW: My idea around flags matches what I recently added for
> VolReadErrorMode in storage_backend.h... But for this it'd be something
> like the following in (I assume) domain_conf.h near _virDomainShmemDef.
>
>      /* DomainShmemMatchFlags
>       * Flags to dictate the level of matching when searching for a
>       * shmem object in the domain 'nshmems' list.
>       */
>      enum {
>          VIR_DOMAIN_SHMEM_MATCH_NAME_ONLY = 1 << 0,
>      }
>
>
> In general though it seems fine.

Okay, i have saw your comment mentioned this in another mail, and i will 
post a new version include your idea.

Thanks a lot for your review and suggestion.

Luyao

> John
>
>> +            virReportError(VIR_ERR_OPERATION_FAILED, "%s",
>> +                           _("no matching shared memory device was found"));
>> +            return -1;
>> +        }
>> +
>> +        virDomainShmemDefFree(virDomainShmemRemove(vmdef, idx));
>> +        break;
>> +
>>       case VIR_DOMAIN_DEVICE_INPUT:
>>       case VIR_DOMAIN_DEVICE_SOUND:
>>       case VIR_DOMAIN_DEVICE_VIDEO:
>> @@ -8319,7 +8337,6 @@ qemuDomainDetachDeviceConfig(virDomainDefPtr vmdef,
>>       case VIR_DOMAIN_DEVICE_SMARTCARD:
>>       case VIR_DOMAIN_DEVICE_MEMBALLOON:
>>       case VIR_DOMAIN_DEVICE_NVRAM:
>> -    case VIR_DOMAIN_DEVICE_SHMEM:
>>       case VIR_DOMAIN_DEVICE_REDIRDEV:
>>       case VIR_DOMAIN_DEVICE_NONE:
>>       case VIR_DOMAIN_DEVICE_TPM:
>>




More information about the libvir-list mailing list