[libvirt] [PATCH] qemu: Add default address type for vhost-userinterface on aarch64

Michal Privoznik mprivozn at redhat.com
Mon Dec 17 10:33:46 UTC 2018


On 12/17/18 9:30 AM, wang.yechao255 at zte.com.cn wrote:
>> On 12/14/18 10:19 AM, Wang Yechao wrote:
>>> on aarch64, hotadd vhost-user interface with the follow xml file:
>>> <interface type='vhostuser'>
>>>   <mac address='fa:16:3e:a2:e1:58'/>
>>>   <source type='unix' path='/var/run/vhu24a3f044-80' mode='server'/>
>>>   <target dev='vhu24a3f044-80'/>
>>>   <model type='virtio'/>
>>> </interface>
>>>
>>> will get error like that:
>>> error: internal error: Nicdev support unavailable
>>>
>>> Because there is no device address type specified in xml file, so
>>> qemuDomainSupportsNicdev returns 'false' when invoked in
>>> qemuDomainAttachNetDevice. Using pci as the default address type,
>>> and assigns pci address later in qemuDomainEnsurePCIAddress.
>>>
>>> Signed-off-by: Wang Yechao <wang.yechao255 at zte.com.cn>
>>> ---
>>>  src/qemu/qemu_hotplug.c | 5 +++++
>>>  1 file changed, 5 insertions(+)
>>>
>>> diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
>>> index 68d021a..c1464a9 100644
>>> --- a/src/qemu/qemu_hotplug.c
>>> +++ b/src/qemu/qemu_hotplug.c
>>> @@ -1443,6 +1443,11 @@ qemuDomainAttachNetDevice(virQEMUDriverPtr driver,
>>>          queueSize = net->driver.virtio.queues;
>>>          if (!queueSize)
>>>              queueSize = 1;
>>> +
>>> +        if (!net->info.type &&
>>> +            vm->def->os.arch == VIR_ARCH_AARCH64)
>>> +            net->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI;
>>
>> This is almost certainly incorrect. At this point, the address should
>> have been already assigned. Maybe you need to look into why it wasn't.
>>
>> Michal
> 
> Thank you for your immediate reply. I have checked the 'vhostuser' type
> and 'bridge' type interface on x86, 'bridge' type interface on aarch64:
> hotadd these devices with no address specified in xml file, the address
> has also not been assigned at this point, but it works well. All of that
> assign an address in qemuDomainEnsurePCIAddress in the later time.
> Can I put the qemuDomainEnsurePCIAddress before the switch statement?
> such as:
> 
> --- a/src/qemu/qemu_hotplug.c
> +++ b/src/qemu/qemu_hotplug.c
> @@ -1369,6 +1369,25 @@ qemuDomainAttachNetDevice(virQEMUDriverPtr driver,
>      if (qemuAssignDeviceNetAlias(vm->def, net, -1) < 0)
>          goto cleanup;
> 
> +    if (qemuDomainIsS390CCW(vm->def) &&
> +        net->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI &&
> +        virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_CCW)) {
> +        net->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW;
> +        if (!(ccwaddrs = virDomainCCWAddressSetCreateFromDomain(vm->def)))
> +            goto cleanup;
> +        if (virDomainCCWAddressAssign(&net->info, ccwaddrs,
> +                                      !net->info.addr.ccw.assigned) < 0)
> +            goto cleanup;
> +    } else if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_VIRTIO_S390)) {
> +        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> +                       _("virtio-s390 net device cannot be hotplugged."));
> +        goto cleanup;
> +    } else if (qemuDomainEnsurePCIAddress(vm, &dev, driver) < 0) {
> +        goto cleanup;
> +    }
> +
> +    releaseaddr = true;
> +
>      switch (actualType) {
>      case VIR_DOMAIN_NET_TYPE_BRIDGE:
>      case VIR_DOMAIN_NET_TYPE_NETWORK:
> @@ -1503,25 +1522,6 @@ qemuDomainAttachNetDevice(virQEMUDriverPtr driver,
>              goto cleanup;
>      }
> 
> -    if (qemuDomainIsS390CCW(vm->def) &&
> -        net->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI &&
> -        virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_CCW)) {
> -        net->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW;
> -        if (!(ccwaddrs = virDomainCCWAddressSetCreateFromDomain(vm->def)))
> -            goto cleanup;
> -        if (virDomainCCWAddressAssign(&net->info, ccwaddrs,
> -                                      !net->info.addr.ccw.assigned) < 0)
> -            goto cleanup;
> -    } else if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_VIRTIO_S390)) {
> -        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> -                       _("virtio-s390 net device cannot be hotplugged."));
> -        goto cleanup;
> -    } else if (qemuDomainEnsurePCIAddress(vm, &dev, driver) < 0) {
> -        goto cleanup;
> -    }
> -
> -    releaseaddr = true;
> -
>      if (VIR_ALLOC_N(tapfdName, tapfdSize) < 0 ||
> 
> 

Yes, this looks reasonable. Can you send it as a patch please?

Michal




More information about the libvir-list mailing list