aer_print_error() skips printing if ratelimit_print[i] is not set.
In the native AER path, ratelimit_print is initialized by
add_error_device() during source device discovery, and is set to 1
for fatal errors to bypass rate limiting since fatal errors should
always be logged.

The DPC/EDR path uses the DPC-capable port as the error source and
reads its AER uncorrectable error status registers directly in
dpc_get_aer_uncorrect_severity(). Since it does not go through
add_error_device(), ratelimit_print[0] is left uninitialized and zero.
As a result, aer_print_error() silently drops all AER error messages
for DPC/EDR triggered events.

Set ratelimit_print[0] to 1 to bypass rate limiting and always print
AER logs for fatal errors.

Fixes: a57f2bfb4a58 ("PCI/AER: Ratelimit correctable and non-fatal error 
logging")
Co-developed-by: Goudar Manjunath Ramanagouda 
<[email protected]>
Signed-off-by: Goudar Manjunath Ramanagouda 
<[email protected]>
Signed-off-by: Kuppuswamy Sathyanarayanan 
<[email protected]>
---
 drivers/pci/pcie/dpc.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/pci/pcie/dpc.c b/drivers/pci/pcie/dpc.c
index fc18349614d7..7605ddd9f0ba 100644
--- a/drivers/pci/pcie/dpc.c
+++ b/drivers/pci/pcie/dpc.c
@@ -256,6 +256,7 @@ static int dpc_get_aer_uncorrect_severity(struct pci_dev 
*dev,
 
        info->dev[0] = dev;
        info->error_dev_num = 1;
+       info->ratelimit_print[0] = 1;
 
        return 1;
 }
-- 
2.43.0


Reply via email to