]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/commitdiff
PCI/DPC: Print AER status in DPC event handling
authorKeith Busch <keith.busch@intel.com>
Mon, 16 Jul 2018 22:05:05 +0000 (17:05 -0500)
committerBjorn Helgaas <bhelgaas@google.com>
Thu, 19 Jul 2018 21:21:01 +0000 (16:21 -0500)
A DPC enabled device suppresses ERR_(NON)FATAL messages, preventing the AER
handler from reporting error details.  If the DPC trigger reason says the
downstream port detected the error, collect the AER uncorrectable status
for logging, then clear the status.

Signed-off-by: Keith Busch <keith.busch@intel.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Sinan Kaya <okaya@kernel.org>
Reviewed-by: Oza Pawandeep <poza@codeaurora.org>
drivers/pci/pcie/dpc.c

index 1b0b25ba947ce7636b0577acbe1c4ac8e4542fa7..f6098dd171f324a1a7c8d828f2a16b295faca31d 100644 (file)
@@ -6,6 +6,7 @@
  * Copyright (C) 2016 Intel Corp.
  */
 
+#include <linux/aer.h>
 #include <linux/delay.h>
 #include <linux/interrupt.h>
 #include <linux/init.h>
@@ -161,6 +162,7 @@ static void dpc_process_rp_pio_error(struct dpc_dev *dpc)
 
 static void dpc_work(struct work_struct *work)
 {
+       struct aer_err_info info;
        struct dpc_dev *dpc = container_of(work, struct dpc_dev, work);
        struct pci_dev *pdev = dpc->dev->port;
        struct device *dev = &dpc->dev->device;
@@ -185,6 +187,10 @@ static void dpc_work(struct work_struct *work)
        /* show RP PIO error detail information */
        if (dpc->rp_extensions && reason == 3 && ext_reason == 0)
                dpc_process_rp_pio_error(dpc);
+       else if (reason == 0 && aer_get_device_error_info(pdev, &info)) {
+               aer_print_error(pdev, &info);
+               pci_cleanup_aer_uncorrect_error_status(pdev);
+       }
 
        /* We configure DPC so it only triggers on ERR_FATAL */
        pcie_do_fatal_recovery(pdev, PCIE_PORT_SERVICE_DPC);