Hi Lukas,
On 9/27/2026 11:02 AM, Lukas Wunner wrote:
> The AER driver uses constants for Correctable, Non-Fatal and Fatal Error
> severity which look as if they match something in the spec, but are
> actually just made-up numbers.
>
> Use the bit number in the Device Status Register instead (PCIe r7.1 sec
> 7.5.3.5). A subsequent commit takes advantage of this by using BIT() to
> conveniently compute the register bit corresponding to a given severity.
>
> While at it, drop the DPC_FATAL constant which was introduced by commit
> b09803b5e546 ("PCI/DPC: Use the generic pcie_do_fatal_recovery() path")
> but never saw any use in 8 years.
>
This changes the raw severity value in the aer_event tracepoint, which
may break userspace. rasdaemon relies on the current numbering
(enum hw_event_aer_err_type in core/ras-events.h), so it would
misclassify error.
> Signed-off-by: Lukas Wunner <[email protected]>
> ---
> drivers/pci/pcie/aer.c | 2 +-
> include/linux/aer.h | 8 ++++----
> include/ras/ras_event.h | 2 +-
> 3 files changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/pci/pcie/aer.c b/drivers/pci/pcie/aer.c
> index 34a8eddc427a..6bc843ab9b37 100644
> --- a/drivers/pci/pcie/aer.c
> +++ b/drivers/pci/pcie/aer.c
> @@ -504,9 +504,9 @@ void pci_aer_exit(struct pci_dev *dev)
> * AER error strings
> */
> static const char * const aer_error_severity_string[] = {
> + "Correctable",
> "Uncorrectable (Non-Fatal)",
> "Uncorrectable (Fatal)",
> - "Correctable"
> };
>
> static const char *aer_error_layer[] = {
> diff --git a/include/linux/aer.h b/include/linux/aer.h
> index df0f5c382286..795c55132008 100644
> --- a/include/linux/aer.h
> +++ b/include/linux/aer.h
> @@ -11,10 +11,10 @@
> #include <linux/errno.h>
> #include <linux/types.h>
>
> -#define AER_NONFATAL 0
> -#define AER_FATAL 1
> -#define AER_CORRECTABLE 2
> -#define DPC_FATAL 3
> +/* Must match bit number in Device Status Register (PCIe r7.1, sec 7.5.3.5)
> */
> +#define AER_CORRECTABLE 0
> +#define AER_NONFATAL 1
> +#define AER_FATAL 2
>
> /*
> * AER and DPC capabilities TLP Logging register sizes (PCIe r6.2, sec 7.8.4
> diff --git a/include/ras/ras_event.h b/include/ras/ras_event.h
> index fdb785fa4613..1e03ade99386 100644
> --- a/include/ras/ras_event.h
> +++ b/include/ras/ras_event.h
> @@ -302,7 +302,7 @@ TRACE_EVENT(non_standard_event,
> * ([domain:]bus:device.function).
> * u32 status - Either the correctable or uncorrectable register
> * indicating what error or errors have been seen
> - * u8 severity - error severity 0:NONFATAL 1:FATAL 2:CORRECTED
> + * u8 severity - error severity 0:CORRECTED 1:NONFATAL 2:FATAL
> */
>
> #define aer_correctable_errors \
--
Sathyanarayanan Kuppuswamy
Linux Kernel Developer