From: Sean V Kelley <[email protected]>

A generic term such as "bridge" may be used for something with
a subordinate bus. The mix of ports would benefit from a use of
the term. Further clarity can be had in pcie_do_recovery()
with use of pci_upstream_bridge() in place of dev->bus->self.
Reverse the pcie_do_recovery() conditional logic and replace
use of "dev" with "bridge".

Suggested-by: Bjorn Helgaas <[email protected]>
Signed-off-by: Sean V Kelley <[email protected]>
Acked-by: Jonathan Cameron <[email protected]>
---
 drivers/pci/pcie/err.c | 28 +++++++++++++++++-----------
 1 file changed, 17 insertions(+), 11 deletions(-)

diff --git a/drivers/pci/pcie/err.c b/drivers/pci/pcie/err.c
index 950612342f1c..e68ea5243ff2 100644
--- a/drivers/pci/pcie/err.c
+++ b/drivers/pci/pcie/err.c
@@ -152,20 +152,26 @@ pci_ers_result_t pcie_do_recovery(struct pci_dev *dev,
 {
        pci_ers_result_t status = PCI_ERS_RESULT_CAN_RECOVER;
        struct pci_bus *bus;
+       struct pci_dev *bridge;
+       int type;
 
        /*
-        * Error recovery runs on all subordinates of the first downstream port.
-        * If the downstream port detected the error, it is cleared at the end.
+        * Error recovery runs on all subordinates of the first downstream
+        * bridge. If the downstream bridge detected the error, it is
+        * cleared at the end.
         */
-       if (!(pci_pcie_type(dev) == PCI_EXP_TYPE_ROOT_PORT ||
-             pci_pcie_type(dev) == PCI_EXP_TYPE_DOWNSTREAM))
-               dev = dev->bus->self;
-       bus = dev->subordinate;
-
+       type = pci_pcie_type(dev);
+       if (type == PCI_EXP_TYPE_ROOT_PORT ||
+           type == PCI_EXP_TYPE_DOWNSTREAM)
+               bridge = dev;
+       else
+               bridge = pci_upstream_bridge(dev);
+
+       bus = bridge->subordinate;
        pci_dbg(dev, "broadcast error_detected message\n");
        if (state == pci_channel_io_frozen) {
                pci_walk_bus(bus, report_frozen_detected, &status);
-               status = reset_subordinate_device(dev);
+               status = reset_subordinate_device(bridge);
                if (status != PCI_ERS_RESULT_RECOVERED) {
                        pci_warn(dev, "subordinate device reset failed\n");
                        goto failed;
@@ -197,9 +203,9 @@ pci_ers_result_t pcie_do_recovery(struct pci_dev *dev,
        pci_dbg(dev, "broadcast resume message\n");
        pci_walk_bus(bus, report_resume, &status);
 
-       if (pcie_aer_is_native(dev))
-               pcie_clear_device_status(dev);
-       pci_aer_clear_nonfatal_status(dev);
+       if (pcie_aer_is_native(bridge))
+               pcie_clear_device_status(bridge);
+       pci_aer_clear_nonfatal_status(bridge);
        pci_info(dev, "device recovery successful\n");
        return status;
 
-- 
2.28.0

Reply via email to