Re: [patch 2/8] [Intel IOMMU] Some generic search functionsrequired to lookup device relationships.

From: Shaohua Li
Date: Wed Apr 11 2007 - 02:14:39 EST


On Tue, 2007-04-10 at 06:03 -0700, Greg KH wrote:
> On Tue, Apr 10, 2007 at 04:11:38PM +0800, Shaohua Li wrote:
> > On Mon, 2007-04-09 at 20:46 -0700, Greg KH wrote:
> > > On Mon, Apr 09, 2007 at 02:55:54PM -0700, Ashok Raj wrote:
> > > > +/*
> > > > + * find the upstream PCIE-to-PCI bridge of a PCI device
> > > > + * if the device is PCIE, return NULL
> > > > + * if the device isn't connected to a PCIE bridge (that is its parent is a
> > > > + * legacy PCI bridge and the bridge is directly connected to bus 0), return its
> > > > + * parent
> > > > + */
> > > > +struct pci_dev *
> > > > +pci_find_upstream_pcie_bridge(struct pci_dev *pdev)
> > > > +{
> > > > + struct pci_dev *tmp = NULL;
> > > > +
> > > > + if (pdev->is_pcie)
> > > > + return NULL;
> > > > + while (1) {
> > > > + if (!pdev->bus->self)
> > > > + break;
> > > > + pdev = pdev->bus->self;
> > > > + /* a p2p bridge */
> > > > + if (!pdev->is_pcie) {
> > > > + tmp = pdev;
> > > > + continue;
> > > > + }
> > > > + /* PCI device should connect to a PCIE bridge */
> > > > + BUG_ON(pdev->pcie_type != PCI_EXP_TYPE_PCI_BRIDGE);
> > > > + return pdev;
> > > > + }
> > > > +
> > > > + return tmp;
> > > > +}
> > >
> > > No locking while you walk up the bus list?
> > hmm, iommu driver didn't support pci hotplug in current stage. But we
> > can add lock here.
>
> Please do, as PCI-E hotplug is much more common than PCI hotplug these
> days (think ExpressCard in millions of laptops...)
Sounds we can't add lock here. pci_bus_sem is a semaphore, but the api
can be called within a spinlock and maybe with interrupt disabled. On
the other hand, there is no hotplug risk here. The pdev is in use (the
driver is doing dma buf allocation) when the api is called, so it's
parent can't be hotpluged too. If you feel others misuse the api, we
could move it to intel_iommu.c.

Thanks,
Shaohua
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/