]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
rseq: Add statistics for time slice extensions
authorThomas Gleixner <tglx@linutronix.de>
Mon, 15 Dec 2025 16:52:09 +0000 (17:52 +0100)
committerPeter Zijlstra <peterz@infradead.org>
Thu, 22 Jan 2026 10:11:17 +0000 (11:11 +0100)
Extend the quick statistics with time slice specific fields.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://patch.msgid.link/20251215155708.795202254@linutronix.de
include/linux/rseq_entry.h
kernel/rseq.c

index d0ec4714ffd61f65ba4d45c32d0c66ce74533a57..54d8e338b26e95778f9f329a6b15d56d6c7d3c43 100644 (file)
@@ -15,6 +15,11 @@ struct rseq_stats {
        unsigned long   cs;
        unsigned long   clear;
        unsigned long   fixup;
+       unsigned long   s_granted;
+       unsigned long   s_expired;
+       unsigned long   s_revoked;
+       unsigned long   s_yielded;
+       unsigned long   s_aborted;
 };
 
 DECLARE_PER_CPU(struct rseq_stats, rseq_stats);
index bf75268580ef2ff928d455f6049c3b18030b2a48..415d75b6df2c473615bf8697cbffcf042fa020ad 100644 (file)
@@ -138,6 +138,13 @@ static int rseq_stats_show(struct seq_file *m, void *p)
                stats.cs        += data_race(per_cpu(rseq_stats.cs, cpu));
                stats.clear     += data_race(per_cpu(rseq_stats.clear, cpu));
                stats.fixup     += data_race(per_cpu(rseq_stats.fixup, cpu));
+               if (IS_ENABLED(CONFIG_RSEQ_SLICE_EXTENSION)) {
+                       stats.s_granted += data_race(per_cpu(rseq_stats.s_granted, cpu));
+                       stats.s_expired += data_race(per_cpu(rseq_stats.s_expired, cpu));
+                       stats.s_revoked += data_race(per_cpu(rseq_stats.s_revoked, cpu));
+                       stats.s_yielded += data_race(per_cpu(rseq_stats.s_yielded, cpu));
+                       stats.s_aborted += data_race(per_cpu(rseq_stats.s_aborted, cpu));
+               }
        }
 
        seq_printf(m, "exit:   %16lu\n", stats.exit);
@@ -148,6 +155,13 @@ static int rseq_stats_show(struct seq_file *m, void *p)
        seq_printf(m, "cs:     %16lu\n", stats.cs);
        seq_printf(m, "clear:  %16lu\n", stats.clear);
        seq_printf(m, "fixup:  %16lu\n", stats.fixup);
+       if (IS_ENABLED(CONFIG_RSEQ_SLICE_EXTENSION)) {
+               seq_printf(m, "sgrant: %16lu\n", stats.s_granted);
+               seq_printf(m, "sexpir: %16lu\n", stats.s_expired);
+               seq_printf(m, "srevok: %16lu\n", stats.s_revoked);
+               seq_printf(m, "syield: %16lu\n", stats.s_yielded);
+               seq_printf(m, "sabort: %16lu\n", stats.s_aborted);
+       }
        return 0;
 }