PCI/AER: Skip recovery callbacks for correctable errors from ACPI APEI
authorTyler Baicar <tbaicar@codeaurora.org>
Mon, 28 Aug 2017 17:09:44 +0000 (11:09 -0600)
committerBjorn Helgaas <bhelgaas@google.com>
Tue, 19 Dec 2017 05:02:21 +0000 (23:02 -0600)
PCIe correctable errors are corrected by hardware.  Software may log them,
but no other software intervention is required.

There are two paths to enter the AER recovery code: (1) the native path
where Linux fields the AER interrupt and reads the AER registers directly,
and (2) the ACPI path where firmware reads the AER registers and hands them
off to Linux via the ACPI APEI path.

The AER do_recovery() function calls driver error reporting callbacks
(error_detected(), mmio_enabled(), resume(), etc), attempts recovery (for
fatal errors), and logs a "AER: Device recovery successful" message.

Since there's nothing to recover for correctable errors, the native path
already skips do_recovery(), so it doesn't call the driver callbacks and or
emit the message.  Make the APEI path do the same.

Signed-off-by: Tyler Baicar <tbaicar@codeaurora.org>
[bhelgaas: changelog]
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
drivers/pci/pcie/aer/aerdrv_core.c

index 744805232155ccb15c7020ca3fdcab08bd50af7c..3e354f224422a2438af353e692b12c869cd4876d 100644 (file)
@@ -633,7 +633,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);
        }
 }