]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
tracepoints: Use WARN() and not WARN_ON() for warnings
authorSteven Rostedt (Google) <rostedt@goodmis.org>
Wed, 28 Feb 2024 18:31:12 +0000 (13:31 -0500)
committerSteven Rostedt (Google) <rostedt@goodmis.org>
Mon, 18 Mar 2024 14:33:06 +0000 (10:33 -0400)
There are two WARN_ON*() warnings in tracepoint.h that deal with RCU
usage. But when they trigger, especially from using a TRACE_EVENT()
macro, the information is not very helpful and is confusing:

 ------------[ cut here ]------------
 WARNING: CPU: 0 PID: 0 at include/trace/events/lock.h:24 lock_acquire+0x2b2/0x2d0

Where the above warning takes you to:

 TRACE_EVENT(lock_acquire,  <<<--- line 24 in lock.h

TP_PROTO(struct lockdep_map *lock, unsigned int subclass,
int trylock, int read, int check,
struct lockdep_map *next_lock, unsigned long ip),
[..]

Change the WARN_ON_ONCE() to WARN_ONCE() and add a string that allows
someone to search for exactly where the bug happened.

Link: https://lore.kernel.org/linux-trace-kernel/20240228133112.0d64fb1b@gandalf.local.home
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Reported-by: Borislav Petkov <bp@alien8.de>
Tested-by: Borislav Petkov (AMD) <bp@alien8.de>
Reviewed-by: Paul E. McKenney <paulmck@kernel.org>
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
include/linux/tracepoint.h

index 88c0ba623ee6bf5b59cdf0521961ab46c67e2829..689b6d71590e99db90f6bd4da8615b092c1c6cbc 100644 (file)
@@ -199,7 +199,8 @@ static inline struct tracepoint *tracepoint_ptr_deref(tracepoint_ptr_t *p)
                if (!(cond))                                            \
                        return;                                         \
                                                                        \
-               if (WARN_ON_ONCE(RCUIDLE_COND(rcuidle)))                \
+               if (WARN_ONCE(RCUIDLE_COND(rcuidle),                    \
+                             "Bad RCU usage for tracepoint"))          \
                        return;                                         \
                                                                        \
                /* keep srcu and sched-rcu usage consistent */          \
@@ -259,7 +260,8 @@ static inline struct tracepoint *tracepoint_ptr_deref(tracepoint_ptr_t *p)
                                TP_ARGS(args),                          \
                                TP_CONDITION(cond), 0);                 \
                if (IS_ENABLED(CONFIG_LOCKDEP) && (cond)) {             \
-                       WARN_ON_ONCE(!rcu_is_watching());               \
+                       WARN_ONCE(!rcu_is_watching(),                   \
+                                 "RCU not watching for tracepoint");   \
                }                                                       \
        }                                                               \
        __DECLARE_TRACE_RCU(name, PARAMS(proto), PARAMS(args),          \