From: Bjorn Helgaas Date: Wed, 6 Nov 2013 17:11:48 +0000 (-0700) Subject: PCI: Add pci_upstream_bridge() X-Git-Tag: v3.13-rc1~95^2^2~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c6bde215acfd637708142ae671843b6f0eadbc6d;p=thirdparty%2Fkernel%2Flinux.git PCI: Add pci_upstream_bridge() 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 Acked-by: Yinghai Lu --- diff --git a/include/linux/pci.h b/include/linux/pci.h index d3a888ae4b2e3..835ec7bf6c05a 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -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) {