forked from Minki/linux
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 commit0e40523287
("PCI: fix oops when try to find Root Port for a PCI device") which added an extra check that would now be redundant. Fixes:a99b646afa
("PCI: Disable PCIe Relaxed Ordering if unsupported") Fixes:c56d4450eb
("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>
This commit is contained in:
parent
cdbeb633ca
commit
b6f6d56c91
@ -514,7 +514,7 @@ EXPORT_SYMBOL(pci_find_resource);
|
|||||||
*/
|
*/
|
||||||
struct pci_dev *pci_find_pcie_root_port(struct pci_dev *dev)
|
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);
|
bridge = pci_upstream_bridge(dev);
|
||||||
while (bridge && pci_is_pcie(bridge)) {
|
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);
|
bridge = pci_upstream_bridge(bridge);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (highest_pcie_bridge &&
|
if (pci_pcie_type(highest_pcie_bridge) != PCI_EXP_TYPE_ROOT_PORT)
|
||||||
pci_pcie_type(highest_pcie_bridge) == PCI_EXP_TYPE_ROOT_PORT)
|
return NULL;
|
||||||
return highest_pcie_bridge;
|
|
||||||
|
|
||||||
return NULL;
|
return highest_pcie_bridge;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(pci_find_pcie_root_port);
|
EXPORT_SYMBOL(pci_find_pcie_root_port);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user