Merge tag 'pci-v4.16-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaa...
[sfrench/cifs-2.6.git] / drivers / pci / pcie / aer / aerdrv_core.c
index 8d7448063fd1168aaafff9e1c1a37456b12ddefe..a4bfea52e7d48a8b32332344e9bd8ea2e7f41965 100644 (file)
@@ -1,10 +1,7 @@
+// SPDX-License-Identifier: GPL-2.0
 /*
  * drivers/pci/pcie/aer/aerdrv_core.c
  *
- * This file is subject to the terms and conditions of the GNU General Public
- * License.  See the file "COPYING" in the main directory of this archive
- * for more details.
- *
  * This file implements the core part of PCIe AER. When a PCIe
  * error is delivered, an error message will be collected and printed to
  * console, then, an error recovery procedure will be executed by following
@@ -226,9 +223,8 @@ static bool find_source_device(struct pci_dev *parent,
        pci_walk_bus(parent->subordinate, find_device_iter, e_info);
 
        if (!e_info->error_dev_num) {
-               dev_printk(KERN_DEBUG, &parent->dev,
-                               "can't find device of ID%04x\n",
-                               e_info->id);
+               pci_printk(KERN_DEBUG, parent, "can't find device of ID%04x\n",
+                          e_info->id);
                return false;
        }
        return true;
@@ -256,7 +252,7 @@ static int report_error_detected(struct pci_dev *dev, void *data)
                         * of a driver for this device is unaware of
                         * its hw state.
                         */
-                       dev_printk(KERN_DEBUG, &dev->dev, "device has %s\n",
+                       pci_printk(KERN_DEBUG, dev, "device has %s\n",
                                   dev->driver ?
                                   "no AER-aware driver" : "no driver");
                }
@@ -366,7 +362,7 @@ static pci_ers_result_t broadcast_error_message(struct pci_dev *dev,
 {
        struct aer_broadcast_data result_data;
 
-       dev_printk(KERN_DEBUG, &dev->dev, "broadcast %s message\n", error_mesg);
+       pci_printk(KERN_DEBUG, dev, "broadcast %s message\n", error_mesg);
        result_data.state = state;
        if (cb == report_error_detected)
                result_data.result = PCI_ERS_RESULT_CAN_RECOVER;
@@ -415,7 +411,7 @@ static pci_ers_result_t broadcast_error_message(struct pci_dev *dev,
 static pci_ers_result_t default_reset_link(struct pci_dev *dev)
 {
        pci_reset_bridge_secondary_bus(dev);
-       dev_printk(KERN_DEBUG, &dev->dev, "downstream link has been reset\n");
+       pci_printk(KERN_DEBUG, dev, "downstream link has been reset\n");
        return PCI_ERS_RESULT_RECOVERED;
 }
 
@@ -467,15 +463,13 @@ static pci_ers_result_t reset_link(struct pci_dev *dev)
        } else if (udev->has_secondary_link) {
                status = default_reset_link(udev);
        } else {
-               dev_printk(KERN_DEBUG, &dev->dev,
-                       "no link-reset support at upstream device %s\n",
+               pci_printk(KERN_DEBUG, dev, "no link-reset support at upstream device %s\n",
                        pci_name(udev));
                return PCI_ERS_RESULT_DISCONNECT;
        }
 
        if (status != PCI_ERS_RESULT_RECOVERED) {
-               dev_printk(KERN_DEBUG, &dev->dev,
-                       "link reset at upstream device %s failed\n",
+               pci_printk(KERN_DEBUG, dev, "link reset at upstream device %s failed\n",
                        pci_name(udev));
                return PCI_ERS_RESULT_DISCONNECT;
        }
@@ -539,13 +533,13 @@ static void do_recovery(struct pci_dev *dev, int severity)
                                "resume",
                                report_resume);
 
-       dev_info(&dev->dev, "AER: Device recovery successful\n");
+       pci_info(dev, "AER: Device recovery successful\n");
        return;
 
 failed:
        pci_uevent_ers(dev, PCI_ERS_RESULT_DISCONNECT);
        /* TODO: Should kernel panic here? */
-       dev_info(&dev->dev, "AER: Device recovery failed\n");
+       pci_info(dev, "AER: Device recovery failed\n");
 }
 
 /**
@@ -636,7 +630,8 @@ static void aer_recover_work_func(struct work_struct *work)
                        continue;
                }
                cper_print_aer(pdev, entry.severity, entry.regs);
-               do_recovery(pdev, entry.severity);
+               if (entry.severity != AER_CORRECTABLE)
+                       do_recovery(pdev, entry.severity);
                pci_dev_put(pdev);
        }
 }
@@ -663,7 +658,7 @@ static int get_device_error_info(struct pci_dev *dev, struct aer_err_info *info)
 
        /* The device might not support AER */
        if (!pos)
-               return 1;
+               return 0;
 
        if (info->severity == AER_CORRECTABLE) {
                pci_read_config_dword(dev, pos + PCI_ERR_COR_STATUS,