On Thu, 2015-12-03 at 14:06 -0500, Laine Stump wrote:
> On 12/02/2015 12:39 PM, Andrea Bolognani wrote:
> > This is a straightforward wrapper around
> > virPCIDeviceAddressIOMMUGroupIterate() that will make some code less
> > awkward to write later on.
> > ---
> >   src/libvirt_private.syms |  1 +
> >   src/util/virpci.c        | 26 ++++++++++++++++++++++++++
> >   src/util/virpci.h        |  8 ++++++--
> >   3 files changed, 33 insertions(+), 2 deletions(-)
> > 
> > diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
> > index c1fd9f6..f8aaa4c 100644
> > --- a/src/libvirt_private.syms
> > +++ b/src/libvirt_private.syms
> > @@ -1967,6 +1967,7 @@ virPCIDeviceGetStubDriver;
> >   virPCIDeviceGetUnbindFromStub;
> >   virPCIDeviceGetUsedBy;
> >   virPCIDeviceHasPCIExpressLink;
> > +virPCIDeviceIOMMUGroupIterate;
> >   virPCIDeviceIsAssignable;
> >   virPCIDeviceIsPCIExpress;
> >   virPCIDeviceListAdd;
> > diff --git a/src/util/virpci.c b/src/util/virpci.c
> > index e82583a..d3b2c7e 100644
> > --- a/src/util/virpci.c
> > +++ b/src/util/virpci.c
> > @@ -1786,6 +1786,32 @@ void virPCIDeviceReattachInit(virPCIDevicePtr pci)
> >       pci->reprobe = true;
> >   }
> >  
> > +/**
> > + * virPCIDeviceIOMMUGroupIterate:
> > + * @dev: PCI device
> > + * @actor: function to be called for all PCI addresses in @dev's IOMMU 
> > group
> > + * @opaque: data passed as the last parameter to @actor
> > + *
> > + * Convenience wrapper around virPCIDeviceAddressIOMMUGroupIterate().
> > + *
> > + * Behaves exactly the same, except it takes a virPCIDevicePtr instead of a
> > + * virPCIDeviceAddressPtr as its first argument.
> > + *
> > + * Returns: 0 on success, <0 on failure.
> > + */
> > +int
> > +virPCIDeviceIOMMUGroupIterate(virPCIDevicePtr dev,
> > +                              virPCIDeviceAddressActor actor,
> > +                              void *opaque)
> > +{
> > +    virPCIDeviceAddress devAddr = { dev->domain, dev->bus,
> > +                                    dev->slot, dev->function };
> > +
> > +    return virPCIDeviceAddressIOMMUGroupIterate(&devAddr,
> > +                                                actor,
> > +                                                opaque);
> > +}
> 
> Instead of creating this new function, how about if we change
> virPCIDevice to contain a virPCIDeviceAddress rather than individual
> domain, bus, slot, and function?

I think you already mentioned doing so in the past, and it's
definitely a good idea.

I'll get to it. After the change, we'll be able to just use

  virPCIDeviceAddressIOMMUGroupIterate(virPCIDeviceGetAddress(dev),
                                       actor,
                                       data);

with virPCIDeviceGetAddress() returning a pointer to the
address stored inside the device instead of a newly-allocated
object.

Cheers.

-- 
Andrea Bolognani
Software Engineer - Virtualization Team

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to