aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThierry Reding <treding@nvidia.com>2017-08-17 07:06:14 -0400
committerDavid S. Miller <davem@davemloft.net>2017-08-18 19:14:37 -0400
commitb6f6d56c91f5261c55edef2df300698c4486b669 (patch)
tree29d44f8bdb6e0e9fd844b975bab9d2f6144c0aff
parentcdbeb633ca71a02b7b63bfeb94994bf4e1a0b894 (diff)
PCI: Allow PCI express root ports to find themselves
If the pci_find_pcie_root_port() function is called on a root port itself, return the root port rather than NULL. This effectively reverts commit 0e405232871d6 ("PCI: fix oops when try to find Root Port for a PCI device") which added an extra check that would now be redundant. Fixes: a99b646afa8a ("PCI: Disable PCIe Relaxed Ordering if unsupported") Fixes: c56d4450eb68 ("PCI: Turn off Request Attributes to avoid Chelsio T5 Completion erratum") Signed-off-by: Thierry Reding <treding@nvidia.com> Acked-by: Bjorn Helgaas <bhelgaas@google.com> Tested-by: Shawn Lin <shawn.lin@rock-chips.com> Tested-by: Michael Ellerman <mpe@ellerman.id.au> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/pci/pci.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index da5570cf5c6a..fdf65a6c13f6 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -514,7 +514,7 @@ EXPORT_SYMBOL(pci_find_resource);
514 */ 514 */
515struct pci_dev *pci_find_pcie_root_port(struct pci_dev *dev) 515struct pci_dev *pci_find_pcie_root_port(struct pci_dev *dev)
516{ 516{
517 struct pci_dev *bridge, *highest_pcie_bridge = NULL; 517 struct pci_dev *bridge, *highest_pcie_bridge = dev;
518 518
519 bridge = pci_upstream_bridge(dev); 519 bridge = pci_upstream_bridge(dev);
520 while (bridge && pci_is_pcie(bridge)) { 520 while (bridge && pci_is_pcie(bridge)) {
@@ -522,11 +522,10 @@ struct pci_dev *pci_find_pcie_root_port(struct pci_dev *dev)
522 bridge = pci_upstream_bridge(bridge); 522 bridge = pci_upstream_bridge(bridge);
523 } 523 }
524 524
525 if (highest_pcie_bridge && 525 if (pci_pcie_type(highest_pcie_bridge) != PCI_EXP_TYPE_ROOT_PORT)
526 pci_pcie_type(highest_pcie_bridge) == PCI_EXP_TYPE_ROOT_PORT) 526 return NULL;
527 return highest_pcie_bridge;
528 527
529 return NULL; 528 return highest_pcie_bridge;
530} 529}
531EXPORT_SYMBOL(pci_find_pcie_root_port); 530EXPORT_SYMBOL(pci_find_pcie_root_port);
532 531