Skip to content

Commit 59f6cb6

Browse files
rostedtDinh Nguyen
authored andcommitted
tracing: Fix check for cpu online when event is disabled
[ Upstream commit dc17147 ] Commit f377554 ("tracepoints: Do not trace when cpu is offline") added a check to make sure that tracepoints only get called when the cpu is online, as it uses rcu_read_lock_sched() for protection. Commit 3a63017 ("tracing: generate RCU warnings even when tracepoints are disabled") added lockdep checks (including rcu checks) for events that are not enabled to catch possible RCU issues that would only be triggered if a trace event was enabled. Commit f377554 only stopped the warnings when the trace event was enabled but did not prevent warnings if the trace event was called when disabled. To fix this, the cpu online check is moved to where the condition is added to the trace event. This will place the cpu online check in all places that it may be used now and in the future. Cc: [email protected] # v3.18+ Fixes: f377554 ("tracepoints: Do not trace when cpu is offline") Fixes: 3a63017 ("tracing: generate RCU warnings even when tracepoints are disabled") Reported-by: Sudeep Holla <[email protected]> Tested-by: Sudeep Holla <[email protected]> Signed-off-by: Steven Rostedt <[email protected]> Signed-off-by: Sasha Levin <[email protected]>
1 parent e4e77cc commit 59f6cb6

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed

include/linux/tracepoint.h

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -131,9 +131,6 @@ extern void syscall_unregfunc(void);
131131
void *it_func; \
132132
void *__data; \
133133
\
134-
if (!cpu_online(raw_smp_processor_id())) \
135-
return; \
136-
\
137134
if (!(cond)) \
138135
return; \
139136
prercu; \
@@ -332,15 +329,19 @@ extern void syscall_unregfunc(void);
332329
* "void *__data, proto" as the callback prototype.
333330
*/
334331
#define DECLARE_TRACE_NOARGS(name) \
335-
__DECLARE_TRACE(name, void, , 1, void *__data, __data)
332+
__DECLARE_TRACE(name, void, , \
333+
cpu_online(raw_smp_processor_id()), \
334+
void *__data, __data)
336335

337336
#define DECLARE_TRACE(name, proto, args) \
338-
__DECLARE_TRACE(name, PARAMS(proto), PARAMS(args), 1, \
339-
PARAMS(void *__data, proto), \
340-
PARAMS(__data, args))
337+
__DECLARE_TRACE(name, PARAMS(proto), PARAMS(args), \
338+
cpu_online(raw_smp_processor_id()), \
339+
PARAMS(void *__data, proto), \
340+
PARAMS(__data, args))
341341

342342
#define DECLARE_TRACE_CONDITION(name, proto, args, cond) \
343-
__DECLARE_TRACE(name, PARAMS(proto), PARAMS(args), PARAMS(cond), \
343+
__DECLARE_TRACE(name, PARAMS(proto), PARAMS(args), \
344+
cpu_online(raw_smp_processor_id()) && (PARAMS(cond)), \
344345
PARAMS(void *__data, proto), \
345346
PARAMS(__data, args))
346347

0 commit comments

Comments
 (0)