[tip: timers/core] timer_list: Stop hrtimer queue traversal after seq_file overflow
From: tip-bot2 for Avi Weiss
Date: Mon Nov 09 2026 - 14:59:18 EST
The following commit has been merged into the timers/core branch of tip:
Commit-ID: f6fb9be3bfc9a42e478e7fd7e37408be86a95b9d
Gitweb: https://git.kernel.org/tip/f6fb9be3bfc9a42e478e7fd7e37408be86a95b9d
Author: Avi Weiss <thnkslprpt@xxxxxxxxx>
AuthorDate: Tue, 03 Nov 2026 12:34:39 +02:00
Committer: Thomas Gleixner <tglx@xxxxxxxxxx>
CommitterDate: Mon, 09 Nov 2026 20:25:25 +01:00
timer_list: Stop hrtimer queue traversal after seq_file overflow
When /proc/timer_list overflows its seq_file buffer, seq_file retries
formatting with a larger buffer. print_active_timers() nevertheless
continues scanning the remaining hrtimers, restarting its quadratic
traversal even though the overflowing attempt will be discarded.
Stop traversing at next_one when the seq_file has overflowed. Preserve
the SysRq console path, which passes a NULL seq_file pointer.
In a (virtual) two-CPU KVM guest with 2,048 timerfds pinned to one CPU,
median reader CPU time for a complete /proc/timer_list read fell from
51.1 ms to 14.6 ms. Repeated tests showed no material slowdown for
non-overflowing reads (13.7us before versus 13.8 after). Short reads,
seek-to-start, and SysRq-Q tests also look fine.
Signed-off-by: Avi Weiss <thnkslprpt@xxxxxxxxx>
Signed-off-by: Thomas Gleixner <tglx@xxxxxxxxxx>
Link: https://patch.msgid.link/20261103103438.2154751-2-thnkslprpt@xxxxxxxxx
---
kernel/time/timer_list.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/kernel/time/timer_list.c b/kernel/time/timer_list.c
index 0406bf4..84275b6 100644
--- a/kernel/time/timer_list.c
+++ b/kernel/time/timer_list.c
@@ -64,6 +64,8 @@ static void print_active_timers(struct seq_file *m, struct hrtimer_clock_base *b
unsigned long flags;
next_one:
+ if (m && seq_has_overflowed(m))
+ return;
i = 0;
touch_nmi_watchdog();