[PATCH RESEND 17/20] virpci.c: use virPCIDeviceAddressPtr in virPCIDeviceListFind()

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


On 1/18/21 2:53 PM, Daniel Henrique Barboza wrote:
> Signed-off-by: Daniel Henrique Barboza <danielhb413 at gmail.com>
> ---
>   src/hypervisor/virhostdev.c | 12 ++++++++----
>   src/util/virpci.c           | 16 ++++++++--------
>   src/util/virpci.h           |  2 +-
>   3 files changed, 17 insertions(+), 13 deletions(-)
> 
> diff --git a/src/hypervisor/virhostdev.c b/src/hypervisor/virhostdev.c
> index 402d7be42d..3bfb04c674 100644
> --- a/src/hypervisor/virhostdev.c
> +++ b/src/hypervisor/virhostdev.c
> @@ -657,7 +657,8 @@ virHostdevReattachAllPCIDevices(virHostdevManagerPtr mgr,
>   
>           /* We need to look up the actual device because that's what
>            * virPCIDeviceReattach() expects as its argument */
> -        if (!(actual = virPCIDeviceListFind(mgr->inactivePCIHostdevs, pci)))
> +        if (!(actual = virPCIDeviceListFind(mgr->inactivePCIHostdevs,
> +                                            virPCIDeviceGetAddress(pci))))
>               continue;
>   
>           if (virPCIDeviceGetManaged(actual)) {
> @@ -777,7 +778,8 @@ virHostdevPreparePCIDevicesImpl(virHostdevManagerPtr mgr,
>   
>               /* Unmanaged devices should already have been marked as
>                * inactive: if that's the case, we can simply move on */
> -            if (virPCIDeviceListFind(mgr->inactivePCIHostdevs, pci)) {
> +            if (virPCIDeviceListFind(mgr->inactivePCIHostdevs,
> +                                     virPCIDeviceGetAddress(pci))) {

Wondered at first why you were using a access function to get the 
pointer rather than just referencing it directly. I'd forgotten that 
virPCIDevice is one of those rare "private structures" in libvirt - 
defined only in a single .c file.

Anyway,

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


>                   VIR_DEBUG("Not detaching unmanaged PCI device %s",
>                             virPCIDeviceGetName(pci));
>                   continue;
> @@ -860,7 +862,8 @@ virHostdevPreparePCIDevicesImpl(virHostdevManagerPtr mgr,
>            * there because 'pci' only contain address information and will
>            * be released at the end of the function */
>           pci = virPCIDeviceListGet(pcidevs, i);
> -        actual = virPCIDeviceListFind(mgr->activePCIHostdevs, pci);
> +        actual = virPCIDeviceListFind(mgr->activePCIHostdevs,
> +                                      virPCIDeviceGetAddress(pci));
>   
>           VIR_DEBUG("Setting driver and domain information for PCI device %s",
>                     virPCIDeviceGetName(pci));
> @@ -992,7 +995,8 @@ virHostdevReAttachPCIDevicesImpl(virHostdevManagerPtr mgr,
>            * information such as by which domain and driver it is used. As a
>            * side effect, by looking it up we can also tell whether it was
>            * really active in the first place */
> -        actual = virPCIDeviceListFind(mgr->activePCIHostdevs, pci);
> +        actual = virPCIDeviceListFind(mgr->activePCIHostdevs,
> +                                      virPCIDeviceGetAddress(pci));
>           if (actual) {
>               const char *actual_drvname;
>               const char *actual_domname;
> diff --git a/src/util/virpci.c b/src/util/virpci.c
> index 1554acffb6..9544275c31 100644
> --- a/src/util/virpci.c
> +++ b/src/util/virpci.c
> @@ -705,7 +705,7 @@ virPCIDeviceSharesBusWithActive(virPCIDevicePtr dev, virPCIDevicePtr check, void
>           return 0;
>   
>       /* same bus, but inactive, i.e. about to be assigned to guest */
> -    if (inactiveDevs && virPCIDeviceListFind(inactiveDevs, check))
> +    if (inactiveDevs && virPCIDeviceListFind(inactiveDevs, &check->address))
>           return 0;
>   
>       return 1;
> @@ -1022,7 +1022,7 @@ virPCIDeviceReset(virPCIDevicePtr dev,
>           return -1;
>       }
>   
> -    if (activeDevs && virPCIDeviceListFind(activeDevs, dev)) {
> +    if (activeDevs && virPCIDeviceListFind(activeDevs, &dev->address)) {
>           virReportError(VIR_ERR_INTERNAL_ERROR,
>                          _("Not resetting active device %s"), dev->name);
>           return -1;
> @@ -1294,7 +1294,7 @@ virPCIDeviceDetach(virPCIDevicePtr dev,
>       if (virPCIProbeStubDriver(dev->stubDriver) < 0)
>           return -1;
>   
> -    if (activeDevs && virPCIDeviceListFind(activeDevs, dev)) {
> +    if (activeDevs && virPCIDeviceListFind(activeDevs, &dev->address)) {
>           virReportError(VIR_ERR_INTERNAL_ERROR,
>                          _("Not detaching active device %s"), dev->name);
>           return -1;
> @@ -1306,7 +1306,7 @@ virPCIDeviceDetach(virPCIDevicePtr dev,
>       /* Add *a copy of* the dev into list inactiveDevs, if
>        * it's not already there.
>        */
> -    if (inactiveDevs && !virPCIDeviceListFind(inactiveDevs, dev)) {
> +    if (inactiveDevs && !virPCIDeviceListFind(inactiveDevs, &dev->address)) {
>           VIR_DEBUG("Adding PCI device %s to inactive list", dev->name);
>           if (virPCIDeviceListAddCopy(inactiveDevs, dev) < 0)
>               return -1;
> @@ -1324,7 +1324,7 @@ virPCIDeviceReattach(virPCIDevicePtr dev,
>                        virPCIDeviceListPtr activeDevs,
>                        virPCIDeviceListPtr inactiveDevs)
>   {
> -    if (activeDevs && virPCIDeviceListFind(activeDevs, dev)) {
> +    if (activeDevs && virPCIDeviceListFind(activeDevs, &dev->address)) {
>           virReportError(VIR_ERR_INTERNAL_ERROR,
>                          _("Not reattaching active device %s"), dev->name);
>           return -1;
> @@ -1684,7 +1684,7 @@ int
>   virPCIDeviceListAdd(virPCIDeviceListPtr list,
>                       virPCIDevicePtr dev)
>   {
> -    if (virPCIDeviceListFind(list, dev)) {
> +    if (virPCIDeviceListFind(list, &dev->address)) {
>           virReportError(VIR_ERR_INTERNAL_ERROR,
>                          _("Device %s is already in use"), dev->name);
>           return -1;
> @@ -1795,11 +1795,11 @@ virPCIDeviceListFindByIDs(virPCIDeviceListPtr list,
>   
>   
>   virPCIDevicePtr
> -virPCIDeviceListFind(virPCIDeviceListPtr list, virPCIDevicePtr dev)
> +virPCIDeviceListFind(virPCIDeviceListPtr list, virPCIDeviceAddressPtr devAddr)
>   {
>       int idx;
>   
> -    if ((idx = virPCIDeviceListFindIndex(list, &dev->address)) >= 0)
> +    if ((idx = virPCIDeviceListFindIndex(list, devAddr)) >= 0)
>           return list->devs[idx];
>       else
>           return NULL;
> diff --git a/src/util/virpci.h b/src/util/virpci.h
> index 8c6776da21..628a293972 100644
> --- a/src/util/virpci.h
> +++ b/src/util/virpci.h
> @@ -167,7 +167,7 @@ virPCIDevicePtr virPCIDeviceListStealIndex(virPCIDeviceListPtr list,
>   void virPCIDeviceListDel(virPCIDeviceListPtr list,
>                            virPCIDevicePtr dev);
>   virPCIDevicePtr virPCIDeviceListFind(virPCIDeviceListPtr list,
> -                                     virPCIDevicePtr dev);
> +                                     virPCIDeviceAddressPtr devAddr);
>   virPCIDevicePtr
>   virPCIDeviceListFindByIDs(virPCIDeviceListPtr list,
>                             unsigned int domain,
> 




More information about the libvir-list mailing list