diff options
author | 2025-03-27 13:14:45 -0500 | |
---|---|---|
committer | 2025-03-27 13:14:45 -0500 | |
commit | a7a8e7996c1c114b50df5599229b1e7be38be3db (patch) | |
tree | 8ae85b6a2aa2e5c302264613446359485ab35796 | |
parent | Merge branch 'pci/pwrctrl' (diff) | |
parent | PCI: Avoid reset when disabled via sysfs (diff) | |
download | wireguard-linux-a7a8e7996c1c114b50df5599229b1e7be38be3db.tar.xz wireguard-linux-a7a8e7996c1c114b50df5599229b1e7be38be3db.zip |
Merge branch 'pci/reset'
- Log debug messages about reset methods being used (Bjorn Helgaas)
- Avoid reset when it has been disabled via sysfs (Nishanth Aravamudan)
* pci/reset:
PCI: Avoid reset when disabled via sysfs
PCI: Log debug messages about reset method
-rw-r--r-- | drivers/pci/pci.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index c24b01f7fad5..e1aaf354e878 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -5249,6 +5249,7 @@ const struct pci_reset_fn_method pci_reset_fn_methods[] = { int __pci_reset_function_locked(struct pci_dev *dev) { int i, m, rc; + const struct pci_reset_fn_method *method; might_sleep(); @@ -5265,9 +5266,13 @@ int __pci_reset_function_locked(struct pci_dev *dev) if (!m) return -ENOTTY; - rc = pci_reset_fn_methods[m].reset_fn(dev, PCI_RESET_DO_RESET); + method = &pci_reset_fn_methods[m]; + pci_dbg(dev, "reset via %s\n", method->name); + rc = method->reset_fn(dev, PCI_RESET_DO_RESET); if (!rc) return 0; + + pci_dbg(dev, "%s failed with %d\n", method->name, rc); if (rc != -ENOTTY) return rc; } @@ -5424,6 +5429,8 @@ static bool pci_bus_resettable(struct pci_bus *bus) return false; list_for_each_entry(dev, &bus->devices, bus_list) { + if (!pci_reset_supported(dev)) + return false; if (dev->dev_flags & PCI_DEV_FLAGS_NO_BUS_RESET || (dev->subordinate && !pci_bus_resettable(dev->subordinate))) return false; @@ -5500,6 +5507,8 @@ static bool pci_slot_resettable(struct pci_slot *slot) list_for_each_entry(dev, &slot->bus->devices, bus_list) { if (!dev->slot || dev->slot != slot) continue; + if (!pci_reset_supported(dev)) + return false; if (dev->dev_flags & PCI_DEV_FLAGS_NO_BUS_RESET || (dev->subordinate && !pci_bus_resettable(dev->subordinate))) return false; |