Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b6f6d56c authored by Thierry Reding's avatar Thierry Reding Committed by David S. Miller
Browse files

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 0e405232 ("PCI: fix oops when
try to find Root Port for a PCI device") which added an extra check
that would now be redundant.

Fixes: a99b646a ("PCI: Disable PCIe Relaxed Ordering if unsupported")
Fixes: c56d4450 ("PCI: Turn off Request Attributes to avoid Chelsio T5 Completion erratum")
Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
Acked-by: default avatarBjorn Helgaas <bhelgaas@google.com>
Tested-by: default avatarShawn Lin <shawn.lin@rock-chips.com>
Tested-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent cdbeb633
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -514,7 +514,7 @@ EXPORT_SYMBOL(pci_find_resource);
 */
struct pci_dev *pci_find_pcie_root_port(struct pci_dev *dev)
{
	struct pci_dev *bridge, *highest_pcie_bridge = NULL;
	struct pci_dev *bridge, *highest_pcie_bridge = dev;

	bridge = pci_upstream_bridge(dev);
	while (bridge && pci_is_pcie(bridge)) {
@@ -522,11 +522,10 @@ struct pci_dev *pci_find_pcie_root_port(struct pci_dev *dev)
		bridge = pci_upstream_bridge(bridge);
	}

	if (highest_pcie_bridge &&
	    pci_pcie_type(highest_pcie_bridge) == PCI_EXP_TYPE_ROOT_PORT)
		return highest_pcie_bridge;

	if (pci_pcie_type(highest_pcie_bridge) != PCI_EXP_TYPE_ROOT_PORT)
		return NULL;

	return highest_pcie_bridge;
}
EXPORT_SYMBOL(pci_find_pcie_root_port);