aboutsummaryrefslogtreecommitdiffstatshomepage
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
parentMerge branch 'pci/pwrctl' (diff)
parentPCI: Wait for Link before restoring Downstream Buses (diff)
downloadwireguard-linux-f2a3ce1597b3e1aec96458f80c6cda31a3542b79.tar.xz
wireguard-linux-f2a3ce1597b3e1aec96458f80c6cda31a3542b79.zip
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
Diffstat (limited to '')
-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);
+ }
}
}