[PATCH v2 03/10] PCI/AER: Report the ratelimit interval in milliseconds

From: Yazen Ghannam

Date: Fri Sep 18 2026 - 11:23:36 EST


The "*_ratelimit_interval_ms" attributes convert on the way in but not on
the way out. The store path runs msecs_to_jiffies() before assigning to
ratelimit_state.interval, and the show path prints that field raw.

The field therefore reads back in jiffies while the attribute name and
the ABI documentation both say milliseconds. The two only agree when
CONFIG_HZ is 1000. With CONFIG_HZ=250 the default reads as 1250 rather
than the documented 5000.

Convert back with jiffies_to_msecs() so the attribute reports the unit
it is named for. msecs_to_jiffies() rounds up, so a written value that
is not a whole number of jiffies reads back rounded up. Document what a
read returns, which the burst attributes beside it already do.

Fixes: b4fe7398def6 ("PCI/AER: Add sysfs attributes for log ratelimits")
Assisted-by: LLM
Signed-off-by: Yazen Ghannam <yazen.ghannam@xxxxxxx>
---
Documentation/ABI/testing/sysfs-bus-pci-devices-aer | 6 ++++++
drivers/pci/pcie/aer.c | 8 ++++----
2 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/Documentation/ABI/testing/sysfs-bus-pci-devices-aer b/Documentation/ABI/testing/sysfs-bus-pci-devices-aer
index 215cf8bd4c30..732fc03ef5fb 100644
--- a/Documentation/ABI/testing/sysfs-bus-pci-devices-aer
+++ b/Documentation/ABI/testing/sysfs-bus-pci-devices-aer
@@ -135,6 +135,9 @@ Description: Writing 0, or any negative value, disables AER correctable
ratelimit interval in ms. Default is
DEFAULT_RATELIMIT_INTERVAL (5000 ms).

+ Reading gets the current ratelimit interval in ms, rounded
+ up to a whole jiffy.
+
What: /sys/bus/pci/devices/<dev>/aer/correctable_ratelimit_burst
Date: May 2025
KernelVersion: 6.16.0
@@ -156,6 +159,9 @@ Description: Writing 0, or any negative value, disables AER non-fatal
value sets the ratelimit interval in ms. Default is
DEFAULT_RATELIMIT_INTERVAL (5000 ms).

+ Reading gets the current ratelimit interval in ms, rounded
+ up to a whole jiffy.
+
What: /sys/bus/pci/devices/<dev>/aer/nonfatal_ratelimit_burst
Date: May 2025
KernelVersion: 6.16.0
diff --git a/drivers/pci/pcie/aer.c b/drivers/pci/pcie/aer.c
index 350b57e5ccb1..5498fc605556 100644
--- a/drivers/pci/pcie/aer.c
+++ b/drivers/pci/pcie/aer.c
@@ -688,9 +688,9 @@ const struct attribute_group aer_stats_attr_group = {
};

/*
- * Ratelimit interval
+ * Ratelimit interval, in milliseconds
* <=0: disabled with ratelimit.interval = 0
- * >0: enabled with ratelimit.interval in ms
+ * >0: enabled, ratelimit.interval held in jiffies
*/
#define aer_ratelimit_interval_attr(name, ratelimit) \
static ssize_t \
@@ -698,9 +698,9 @@ const struct attribute_group aer_stats_attr_group = {
char *buf) \
{ \
struct pci_dev *pdev = to_pci_dev(dev); \
+ unsigned long iv = pdev->aer_info->ratelimit.interval; \
\
- return sysfs_emit(buf, "%d\n", \
- pdev->aer_info->ratelimit.interval); \
+ return sysfs_emit(buf, "%u\n", jiffies_to_msecs(iv)); \
} \
\
static ssize_t \
--
2.43.0