summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjorn Helgaas <bhelgaas@google.com>2024-09-19 14:25:27 -0500
committerBjorn Helgaas <bhelgaas@google.com>2024-09-19 14:25:27 -0500
commitf2a3ce1597b3e1aec96458f80c6cda31a3542b79 (patch)
tree5e7bba9f9f7eb81a989ec88068f252e115ada58e
parentd774674f3492740503a3cd3f5da131d088202f1b (diff)
parent3e40aa29d47e231a54640addf6a09c1f64c5b63f (diff)
Merge branch 'pci/reset'
- Wait for each level of downstream bus, not just the first, to become accessible before restoring devices on that bus (Ilpo Järvinen) * pci/reset: PCI: Wait for Link before restoring Downstream Buses
-rw-r--r--drivers/pci/pci.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index 7148a3d4ec8d..04b0bf2e827f 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -5694,8 +5694,10 @@ static void pci_bus_restore_locked(struct pci_bus *bus)
list_for_each_entry(dev, &bus->devices, bus_list) {
pci_dev_restore(dev);
- if (dev->subordinate)
+ if (dev->subordinate) {
+ pci_bridge_wait_for_secondary_bus(dev, "bus reset");
pci_bus_restore_locked(dev->subordinate);
+ }
}
}
@@ -5729,8 +5731,10 @@ static void pci_slot_restore_locked(struct pci_slot *slot)
if (!dev->slot || dev->slot != slot)
continue;
pci_dev_restore(dev);
- if (dev->subordinate)
+ if (dev->subordinate) {
+ pci_bridge_wait_for_secondary_bus(dev, "slot reset");
pci_bus_restore_locked(dev->subordinate);
+ }
}
}