On 1/27/26 6:36 PM, Jonathan Cameron wrote:
On Sat, 24 Jan 2026 15:45:55 +0800
Shuai Xue <[email protected]> wrote:

The AER driver has historically avoided reading the configuration space of
an endpoint or RCiEP that reported a fatal error, considering the link to
that device unreliable. Consequently, when a fatal error occurs, the AER
and DPC drivers do not report specific error types, resulting in logs like:

   pcieport 0015:00:00.0: EDR: EDR event received
   pcieport 0015:00:00.0: EDR: Reported EDR dev: 0015:00:00.0
   pcieport 0015:00:00.0: DPC: containment event, status:0x200d, ERR_FATAL 
received from 0015:01:00.0
   pcieport 0015:00:00.0: AER: broadcast error_detected message
   pcieport 0015:00:00.0: AER: broadcast mmio_enabled message
   pcieport 0015:00:00.0: AER: broadcast resume message
   pcieport 0015:00:00.0: pciehp: Slot(21): Link Down/Up ignored
   pcieport 0015:00:00.0: AER: device recovery successful
   pcieport 0015:00:00.0: EDR: DPC port successfully recovered
   pcieport 0015:00:00.0: EDR: Status for 0015:00:00.0: 0x80

AER status registers are sticky and Write-1-to-clear. If the link recovered
after hot reset, we can still safely access AER status and TLP header of the
error device. In such case, report fatal errors which helps to figure out the
error root case.

After this patch, the logs like:

   pcieport 0015:00:00.0: EDR: EDR event received
   pcieport 0015:00:00.0: EDR: Reported EDR dev: 0015:00:00.0
   pcieport 0015:00:00.0: DPC: containment event, status:0x200d, ERR_FATAL 
received from 0015:01:00.0
   pcieport 0015:00:00.0: AER: broadcast error_detected message
+ vfio-pci 0015:01:00.0: AER: Errors reported prior to reset
+ vfio-pci 0015:01:00.0: PCIe Bus Error: severity=Uncorrectable (Fatal), 
type=Transaction Layer, (Receiver ID)
+ vfio-pci 0015:01:00.0:   device [144d:a80a] error 
status/mask=00001000/00400000
+ vfio-pci 0015:01:00.0:    [12] TLP                    (First)
+ vfio-pci 0015:01:00.0: AER:   TLP Header: 0x4a004010 0x00000040 0x01000000 
0xffffffff
   pcieport 0015:00:00.0: AER: broadcast mmio_enabled message
   pcieport 0015:00:00.0: AER: broadcast resume message
   pcieport 0015:00:00.0: pciehp: Slot(21): Link Down/Up ignored
   pcieport 0015:00:00.0: AER: device recovery successful
   pcieport 0015:00:00.0: EDR: DPC port successfully recovered
   pcieport 0015:00:00.0: EDR: Status for 0015:00:00.0: 0x80

Signed-off-by: Shuai Xue <[email protected]>
Hi Shuai,

With the structure zeroed below (just to make this easier to review, not because
there is a bug as far as I can see)
Reviewed-by: Jonathan Cameron <[email protected]>

diff --git a/drivers/pci/pcie/aer.c b/drivers/pci/pcie/aer.c
index e0bcaa896803..4c0a2bbe9197 100644
--- a/drivers/pci/pcie/aer.c
+++ b/drivers/pci/pcie/aer.c

@@ -1447,17 +1450,38 @@ int aer_get_device_error_info(struct aer_err_info 
*info, int i)
        return 1;
  }
+void aer_report_frozen_error(struct pci_dev *dev)
+{
+       struct aer_err_info info;
+       int type = pci_pcie_type(dev);
+
+       if (type != PCI_EXP_TYPE_ENDPOINT && type != PCI_EXP_TYPE_RC_END)
+               return;
+

struct aer_err_info has a bunch of fields. I'd just make sure it's zeroed
to avoid us having to check that they are all filled in. = {};
or do it with the initial values being assigned.

        info = (struct aer_err_info) {
                .err_dev_num = 0,
                .severity = AER_FATAL,
                .level = KERN_ERR,
        };
        add_error_device(&info, dev);



Got it. Will fix it in next verison.

Thanks for valuable comments.

Best Regards,
Shuai

Reply via email to