[PATCH RESEND 16/20] virpci.c: use virPCIDeviceAddressPtr in virPCIDeviceListFindIndex()

Laine Stump laine at redhat.com
Mon Feb 22 04:00:00 UTC 2021


On 1/18/21 2:53 PM, Daniel Henrique Barboza wrote:
> We're going to need a way to remove a PCI Device from a list without having
> a valid virPCIDevicePtr, because the device is missing from the host. This
> means that virPCIDevicesListDel() must operate with a PCI Device address
> instead.
> 
> Turns out that virPCIDevicesListDel() and its related functions only use
> the virPCIDeviceAddressPtr of the virPCIDevicePtr, so this change is
> simple to do and will not cause hassle in all other callers. Let's
> start adapting virPCIDeviceListFindIndex() and crawl our way up to
> virPCIDevicesListDel().
> 
> Signed-off-by: Daniel Henrique Barboza <danielhb413 at gmail.com>

Reviewed-by: Laine Stump <laine at redhat.com>

(also Declared-should-have-been-done-this-way-in-the-first-place-by: 
Laine Stump <laine at redhat.com> :-))

> ---
>   src/util/virpci.c | 15 ++++++++-------
>   src/util/virpci.h |  2 +-
>   2 files changed, 9 insertions(+), 8 deletions(-)
> 
> diff --git a/src/util/virpci.c b/src/util/virpci.c
> index 7143380348..1554acffb6 100644
> --- a/src/util/virpci.c
> +++ b/src/util/virpci.c
> @@ -1745,7 +1745,7 @@ virPCIDevicePtr
>   virPCIDeviceListSteal(virPCIDeviceListPtr list,
>                         virPCIDevicePtr dev)
>   {
> -    return virPCIDeviceListStealIndex(list, virPCIDeviceListFindIndex(list, dev));
> +    return virPCIDeviceListStealIndex(list, virPCIDeviceListFindIndex(list, &dev->address));
>   }
>   
>   void
> @@ -1756,16 +1756,17 @@ virPCIDeviceListDel(virPCIDeviceListPtr list,
>   }
>   
>   int
> -virPCIDeviceListFindIndex(virPCIDeviceListPtr list, virPCIDevicePtr dev)
> +virPCIDeviceListFindIndex(virPCIDeviceListPtr list,
> +                          virPCIDeviceAddressPtr devAddr)
>   {
>       size_t i;
>   
>       for (i = 0; i < list->count; i++) {
>           virPCIDevicePtr other = list->devs[i];
> -        if (other->address.domain   == dev->address.domain &&
> -            other->address.bus      == dev->address.bus    &&
> -            other->address.slot     == dev->address.slot   &&
> -            other->address.function == dev->address.function)
> +        if (other->address.domain   == devAddr->domain &&
> +            other->address.bus      == devAddr->bus    &&
> +            other->address.slot     == devAddr->slot   &&
> +            other->address.function == devAddr->function)
>               return i;
>       }
>       return -1;
> @@ -1798,7 +1799,7 @@ virPCIDeviceListFind(virPCIDeviceListPtr list, virPCIDevicePtr dev)
>   {
>       int idx;
>   
> -    if ((idx = virPCIDeviceListFindIndex(list, dev)) >= 0)
> +    if ((idx = virPCIDeviceListFindIndex(list, &dev->address)) >= 0)
>           return list->devs[idx];
>       else
>           return NULL;
> diff --git a/src/util/virpci.h b/src/util/virpci.h
> index a9c597a428..8c6776da21 100644
> --- a/src/util/virpci.h
> +++ b/src/util/virpci.h
> @@ -175,7 +175,7 @@ virPCIDeviceListFindByIDs(virPCIDeviceListPtr list,
>                             unsigned int slot,
>                             unsigned int function);
>   int virPCIDeviceListFindIndex(virPCIDeviceListPtr list,
> -                              virPCIDevicePtr dev);
> +                              virPCIDeviceAddressPtr devAddr);
>   
>   /*
>    * Callback that will be invoked once for each file
> 




More information about the libvir-list mailing list