]> Pileus Git - ~andy/linux/commitdiff
PCI: Add pci_upstream_bridge()
authorBjorn Helgaas <bhelgaas@google.com>
Wed, 6 Nov 2013 17:11:48 +0000 (10:11 -0700)
committerBjorn Helgaas <bhelgaas@google.com>
Thu, 7 Nov 2013 21:44:27 +0000 (14:44 -0700)
This adds a pci_upstream_bridge() interface to find the PCI-to-PCI bridge
upstream from a device.  This is typically just "dev->bus->self", but in
the case of a VF on a virtual bus, we have to start from the corresponding
PF.  Returns NULL if there is no upstream PCI bridge, i.e., if the device
is on a root bus.

Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Acked-by: Yinghai Lu <yinghai@kernel.org>
include/linux/pci.h

index d3a888ae4b2e3ad030bdb5f89354eea2f2567d0b..835ec7bf6c05a0d40a5144c4abe6b10012333087 100644 (file)
@@ -480,6 +480,15 @@ static inline bool pci_is_root_bus(struct pci_bus *pbus)
        return !(pbus->parent);
 }
 
+static inline struct pci_dev *pci_upstream_bridge(struct pci_dev *dev)
+{
+       dev = pci_physfn(dev);
+       if (pci_is_root_bus(dev->bus))
+               return NULL;
+
+       return dev->bus->self;
+}
+
 #ifdef CONFIG_PCI_MSI
 static inline bool pci_dev_msi_enabled(struct pci_dev *pci_dev)
 {