[libvirt] [PATCH v2 2/8] Release address in function granularity than slot

Laine Stump laine at laine.org
Thu May 19 18:12:05 UTC 2016


Since you have to unplug all the functions in a slot at the same time 
anyway, I don't see the point in reverting this commit - you'll just end 
up needing to call  it multiple times - once for each function that was 
in the slot.

(just guessing without looking at the code - perhaps it's already being 
called from within lower level functions for each device, and each 
device gets its own notification from qemu that it's been detached? Or 
to ask a more specific question - exactly what happens with device 
detach? Do you send qemu a single detach command and it detaches all the 
functions as a single unit? Or do you send it multiple detach commands, 
with function 0 being the last?)


On 05/18/2016 05:30 PM, Shivaprasad G Bhat wrote:
> The commit 6fe678c is reverted. The code is moved around and cant revert
> staright.
>
> Signed-off-by: Shivaprasad G Bhat <sbhat at linux.vnet.ibm.com>
> ---
>   src/conf/domain_addr.c         |   22 +++++++++-------------
>   src/libvirt_private.syms       |    1 +
>   src/qemu/qemu_domain_address.c |    2 +-
>   3 files changed, 11 insertions(+), 14 deletions(-)
>
> diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c
> index acd8ce6..35c7cd4 100644
> --- a/src/conf/domain_addr.c
> +++ b/src/conf/domain_addr.c
> @@ -472,21 +472,17 @@ virDomainPCIAddressEnsureAddr(virDomainPCIAddressSetPtr addrs,
>           goto cleanup;
>   
>       if (dev->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) {
> -        /* We do not support hotplug multi-function PCI device now, so we should
> -         * reserve the whole slot. The function of the PCI device must be 0.
> -         */
> -        if (dev->addr.pci.function != 0) {
> -            virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> -                           _("Only PCI device addresses with function=0"
> -                             " are supported"));
> -            goto cleanup;
> -        }
> +        if (((dev->addr.pci.function == 0) && (dev->addr.pci.multi == VIR_TRISTATE_SWITCH_ON)) ||
> +            dev->addr.pci.function != 0) {
>   
> -        if (!virDomainPCIAddressValidate(addrs, &dev->addr.pci,
> -                                         addrStr, flags, true))
> -            goto cleanup;
> +            if (!virDomainPCIAddressValidate(addrs, &dev->addr.pci,
> +                                             addrStr, flags, true))
> +                goto cleanup;
>   
> -        ret = virDomainPCIAddressReserveSlot(addrs, &dev->addr.pci, flags);
> +            ret = virDomainPCIAddressReserveAddr(addrs, &dev->addr.pci, flags, false, true);
> +        } else {
> +            ret = virDomainPCIAddressReserveSlot(addrs, &dev->addr.pci, flags);
> +        }
>       } else {
>           ret = virDomainPCIAddressReserveNextSlot(addrs, dev, flags);
>       }
> diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
> index fb24808..e4953b7 100644
> --- a/src/libvirt_private.syms
> +++ b/src/libvirt_private.syms
> @@ -98,6 +98,7 @@ virDomainPCIAddressBusSetModel;
>   virDomainPCIAddressEnsureAddr;
>   virDomainPCIAddressFlagsCompatible;
>   virDomainPCIAddressGetNextSlot;
> +virDomainPCIAddressReleaseAddr;
>   virDomainPCIAddressReleaseSlot;
>   virDomainPCIAddressReserveAddr;
>   virDomainPCIAddressReserveNextSlot;
> diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c
> index 9c8c262..1e7d98c 100644
> --- a/src/qemu/qemu_domain_address.c
> +++ b/src/qemu/qemu_domain_address.c
> @@ -1682,7 +1682,7 @@ qemuDomainReleaseDeviceAddress(virDomainObjPtr vm,
>                    NULLSTR(devstr));
>       else if (info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI &&
>                virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE) &&
> -             virDomainPCIAddressReleaseSlot(priv->pciaddrs,
> +             virDomainPCIAddressReleaseAddr(priv->pciaddrs,
>                                               &info->addr.pci) < 0)
>           VIR_WARN("Unable to release PCI address on %s",
>                    NULLSTR(devstr));
>
> --
> 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