[for-next][PATCH 04/15] tracepoint: Add lockdep rcu_is_watching() check to trace_##name##_enabled()
Geert Uytterhoeven
geert at linux-m68k.org
Tue Jun 30 10:39:02 PDT 2026
Hi Steven, David,
On Fri, 22 May 2026 at 16:35, Steven Rostedt <rostedt at kernel.org> wrote:
> From: David Carlier <devnexen at gmail.com>
>
> The trace_##name##_enabled() static call branch is used when work needs to
> be done for a tracepoint. It allows that work to be skipped when the
> tracepoint is not active and still uses the static_branch() of the
> tracepoint to keep performance.
>
> Tracepoints themselves require being called in "RCU watching" locations
> otherwise races can occur that corrupts things. In order to make sure
> lockdep triggers at tracepoint locations, the lockdep checks are added to
> the tracepoint calling location and trigger even if the tracepoint is not
> enabled. This is done because a poorly placed tracepoint may never be
> detected if it is never enabled when lockdep is enabled.
>
> As trace_##name##_enabled() also prevents the lockdep checks when the
> tracepoint is disabled add lockdep checks to that as well so that if one
> is placed in a location that RCU is not watching, it will trigger a
> lockdep splat even when the tracepoint is not enabled.
>
> Cc: Vineeth Pillai (Google) <vineeth at bitbyteword.org>
> Cc: Mathieu Desnoyers <mathieu.desnoyers at efficios.com>
> Cc: Masami Hiramatsu <mhiramat at kernel.org>
> Cc: Peter Zijlstra <peterz at infradead.org>
> Link: https://patch.msgid.link/20260430144159.10985-1-devnexen@gmail.com
> Signed-off-by: David Carlier <devnexen at gmail.com>
> [ Updated the change log ]
> Signed-off-by: Steven Rostedt <rostedt at goodmis.org>
Thanks for your patch, which is now commit 9764e731ef6abacd
("tracepoint: Add lockdep rcu_is_watching() check to
trace_##name##_enabled()") in v7.2-rc1.
This is causing multiple warnings during system suspend on Renesas
SH-Mobile AG5, R-Car H1. and R-Car M2-W:
PM: suspend entry (deep)
-Filesystems sync: 0.018 seconds
+Filesystems sync: 0.027 seconds
Freezing user space processes
Freezing user space processes completed (elapsed 0.001 seconds)
OOM killer disabled.
Freezing remaining freezable tasks
Freezing remaining freezable tasks completed (elapsed 0.001 seconds)
-PM: suspend devices took 0.110 seconds
+------------[ cut here ]------------
+WARNING: include/trace/events/preemptirq.h:36 at
trace_irq_disable_enabled+0x3c/0x64, CPU#0: swapper/0/0
+------------[ cut here ]------------
+RCU not watching for tracepoint
+Modules linked in:
+WARNING: include/trace/events/preemptirq.h:40 at
trace_irq_enable_enabled+0x3c/0x64, CPU#1: swapper/1/0
+
+RCU not watching for tracepoint
+CPU: 0 UID: 0 PID: 0 Comm: swapper/0 Not tainted
7.1.0-rc4-koelsch-00006-g9764e731ef6a #2337 VOLUNTARY
+Hardware name: Generic R-Car Gen2 (Flattened Device Tree)
+Call trace:
+ unwind_backtrace from show_stack+0x10/0x14
+ show_stack from dump_stack_lvl+0x7c/0xb0
+ dump_stack_lvl from __warn+0x98/0x27c
+ __warn from warn_slowpath_fmt+0xc0/0x124
+ warn_slowpath_fmt from trace_irq_disable_enabled+0x3c/0x64
+ trace_irq_disable_enabled from trace_hardirqs_off+0x6c/0xb0
+ trace_hardirqs_off from __irq_svc+0x48/0xac
+Exception stack(0xc1401f20 to 0xc1401f68)
+1f20: c027a764 effb0e88 00000000 00000001 c140b080 c027a764
c140801c c140b080
+1f40: c1407fe0 00000000 c140801c 00000000 fffffff8 c1401f70
c0b35980 c0b359d8
+1f60: 20000113 ffffffff
+ __irq_svc from cpu_idle_poll+0x114/0x130
+ cpu_idle_poll from do_idle+0xb8/0x268
+ do_idle from cpu_startup_entry+0x28/0x2c
+ cpu_startup_entry from rest_init+0x150/0x178
+ rest_init from start_kernel+0x634/0x6d8
+irq event stamp: 19112
+Modules linked in:
+hardirqs last enabled at (19111): [<c0b35adc>]
default_idle_call+0xe8/0x104
+
+hardirqs last disabled at (19112): [<c0200b88>] __irq_svc+0x48/0xac
+CPU: 1 UID: 0 PID: 0 Comm: swapper/1 Not tainted
7.1.0-rc4-koelsch-00006-g9764e731ef6a #2337 VOLUNTARY
+Hardware name: Generic R-Car Gen2 (Flattened Device Tree)
+Call trace:
+ unwind_backtrace from show_stack+0x10/0x14
+ show_stack from dump_stack_lvl+0x7c/0xb0
+ dump_stack_lvl from __warn+0x98/0x27c
+ __warn from warn_slowpath_fmt+0xc0/0x124
+ warn_slowpath_fmt from trace_irq_enable_enabled+0x3c/0x64
+ trace_irq_enable_enabled from trace_hardirqs_on+0x40/0xbc
+ trace_hardirqs_on from __irq_svc+0x94/0xac
+Exception stack(0xf0865f48 to 0xf0865f90)
+5f40: c027a764 effc2e88 00000000 00000001
c227cec0 c027a764
+5f60: c140801c c227cec0 c1407fe0 413fc0f2 c140801c 00000000
fffffff8 f0865f98
+5f80: c0b35980 c0b35988 20000013 ffffffff
+ __irq_svc from cpu_idle_poll+0xc4/0x130
+ cpu_idle_poll from do_idle+0xb8/0x268
+ do_idle from cpu_startup_entry+0x28/0x2c
+ cpu_startup_entry from secondary_start_kernel+0xdc/0xf0
+ secondary_start_kernel from 0x4020f094
+irq event stamp: 27461
+softirqs last enabled at (19008): [<c02341ec>] handle_softirqs+0x174/0x3e4
+hardirqs last enabled at (27461): [<c027a7d0>] do_idle+0x124/0x268
+softirqs last disabled at (18991): [<c0234a84>] __irq_exit_rcu+0xf0/0x194
+hardirqs last disabled at (27460): [<c027a734>] do_idle+0x88/0x268
+---[ end trace 0000000000000000 ]---
+softirqs last enabled at (27438): [<c02341ec>] handle_softirqs+0x174/0x3e4
+softirqs last disabled at (27425): [<c0234a84>] __irq_exit_rcu+0xf0/0x194
+---[ end trace 0000000000000000 ]---
+PM: suspend devices took 0.380 seconds
Disabling non-boot CPUs ...
Other Renesas ARM32 platforms I tried (R-Mobile A1, RZ/A1H, RZ/A2M)
are unafffected, perhaps because they are not SMP?
All Renesas ARM64 platforms I tried (R-Car Gen3/4) are also unaffected.
Reverting the commit fixes the issue.
Do you have a clue?
Thanks!
> --- a/include/linux/tracepoint.h
> +++ b/include/linux/tracepoint.h
> @@ -293,6 +293,10 @@ static inline struct tracepoint *tracepoint_ptr_deref(tracepoint_ptr_t *p)
> static inline bool \
> trace_##name##_enabled(void) \
> { \
> + if (IS_ENABLED(CONFIG_LOCKDEP)) { \
> + WARN_ONCE(!rcu_is_watching(), \
> + "RCU not watching for tracepoint"); \
> + } \
> return static_branch_unlikely(&__tracepoint_##name.key);\
> }
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert at linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
More information about the linux-arm-kernel
mailing list