From: Stefan Assmann <sassmann@xxxxxxxxxx> pci_find_upstream_pcie_bridge() should take the pci_bus_sem semaphore while reading global PCI structures. Signed-off-by: Stefan Assmann <sassmann@xxxxxxxxxx> Acked-by: Jesse Barnes <jbarnes@xxxxxxxxxxxxxxxx> --- drivers/pci/search.c | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-) diff --git a/drivers/pci/search.c b/drivers/pci/search.c index 9d75dc8..c8159b0 100644 --- a/drivers/pci/search.c +++ b/drivers/pci/search.c @@ -29,6 +29,8 @@ pci_find_upstream_pcie_bridge(struct pci_dev *pdev) if (pci_is_pcie(pdev)) return NULL; + + down_read(&pci_bus_sem); while (1) { if (pci_is_root_bus(pdev->bus)) break; @@ -38,6 +40,7 @@ pci_find_upstream_pcie_bridge(struct pci_dev *pdev) tmp = pdev; continue; } + up_read(&pci_bus_sem); /* PCI device should connect to a PCIe bridge */ if (pdev->pcie_type != PCI_EXP_TYPE_PCI_BRIDGE) { /* Busted hardware? */ @@ -46,6 +49,7 @@ pci_find_upstream_pcie_bridge(struct pci_dev *pdev) } return pdev; } + up_read(&pci_bus_sem); return tmp; } -- 1.7.3.2 -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html