Skip to content

Commit 2da20fd

Browse files
MaxKellermannakpm00
authored andcommitted
kernel/rcu/tree_stall: add /sys/kernel/rcu_stall_count
Expose a simple counter to userspace for monitoring tools. (akpm: 2536c5c added the documentation but the code changes were lost) Link: https://lkml.kernel.org/r/20250504180831.4190860-3-max.kellermann@ionos.com Fixes: 2536c5c ("kernel/rcu/tree_stall: add /sys/kernel/rcu_stall_count") Signed-off-by: Max Kellermann <max.kellermann@ionos.com> Cc: Core Minyard <cminyard@mvista.com> Cc: Doug Anderson <dianders@chromium.org> Cc: Joel Granados <joel.granados@kernel.org> Cc: Max Kellermann <max.kellermann@ionos.com> Cc: Song Liu <song@kernel.org> Cc: Sourabh Jain <sourabhjain@linux.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
1 parent 7266f59 commit 2da20fd

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

kernel/rcu/tree_stall.h

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,28 @@
2020
int sysctl_panic_on_rcu_stall __read_mostly;
2121
int sysctl_max_rcu_stall_to_panic __read_mostly;
2222

23+
#ifdef CONFIG_SYSFS
24+
25+
static unsigned int rcu_stall_count;
26+
27+
static ssize_t rcu_stall_count_show(struct kobject *kobj, struct kobj_attribute *attr,
28+
char *page)
29+
{
30+
return sysfs_emit(page, "%u\n", rcu_stall_count);
31+
}
32+
33+
static struct kobj_attribute rcu_stall_count_attr = __ATTR_RO(rcu_stall_count);
34+
35+
static __init int kernel_rcu_stall_sysfs_init(void)
36+
{
37+
sysfs_add_file_to_group(kernel_kobj, &rcu_stall_count_attr.attr, NULL);
38+
return 0;
39+
}
40+
41+
late_initcall(kernel_rcu_stall_sysfs_init);
42+
43+
#endif // CONFIG_SYSFS
44+
2345
#ifdef CONFIG_PROVE_RCU
2446
#define RCU_STALL_DELAY_DELTA (5 * HZ)
2547
#else
@@ -784,6 +806,10 @@ static void check_cpu_stall(struct rcu_data *rdp)
784806
if (kvm_check_and_clear_guest_paused())
785807
return;
786808

809+
#ifdef CONFIG_SYSFS
810+
++rcu_stall_count;
811+
#endif
812+
787813
rcu_stall_notifier_call_chain(RCU_STALL_NOTIFY_NORM, (void *)j - gps);
788814
if (READ_ONCE(csd_lock_suppress_rcu_stall) && csd_lock_is_stuck()) {
789815
pr_err("INFO: %s detected stall, but suppressed full report due to a stuck CSD-lock.\n", rcu_state.name);

0 commit comments

Comments
 (0)