]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
ftrace: Disable preemption in the tracepoint callbacks handling filtered pids
authorSteven Rostedt <rostedt@goodmis.org>
Tue, 3 Mar 2026 02:35:46 +0000 (21:35 -0500)
committerSteven Rostedt (Google) <rostedt@goodmis.org>
Wed, 4 Mar 2026 03:25:31 +0000 (22:25 -0500)
When function trace PID filtering is enabled, the function tracer will
attach a callback to the fork tracepoint as well as the exit tracepoint
that will add the forked child PID to the PID filtering list as well as
remove the PID that is exiting.

Commit a46023d5616e ("tracing: Guard __DECLARE_TRACE() use of
__DO_TRACE_CALL() with SRCU-fast") removed the disabling of preemption
when calling tracepoint callbacks.

The callbacks used for the PID filtering accounting depended on preemption
being disabled, and now the trigger a "suspicious RCU usage" warning message.

Make them explicitly disable preemption.

Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Link: https://patch.msgid.link/20260302213546.156e3e4f@gandalf.local.home
Fixes: a46023d5616e ("tracing: Guard __DECLARE_TRACE() use of __DO_TRACE_CALL() with SRCU-fast")
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
kernel/trace/ftrace.c

index 827fb9a0bf0dfa6ea16ddfdf5f19d717ffadfca2..2f72af0357e5df491d4f081abc1c57646ca7e7a8 100644 (file)
@@ -8611,6 +8611,7 @@ ftrace_pid_follow_sched_process_fork(void *data,
        struct trace_pid_list *pid_list;
        struct trace_array *tr = data;
 
+       guard(preempt)();
        pid_list = rcu_dereference_sched(tr->function_pids);
        trace_filter_add_remove_task(pid_list, self, task);
 
@@ -8624,6 +8625,7 @@ ftrace_pid_follow_sched_process_exit(void *data, struct task_struct *task)
        struct trace_pid_list *pid_list;
        struct trace_array *tr = data;
 
+       guard(preempt)();
        pid_list = rcu_dereference_sched(tr->function_pids);
        trace_filter_add_remove_task(pid_list, NULL, task);