Skip to content

Commit

Permalink
ftrace: Add comment to why rcu_dereference_sched() is open coded
Browse files Browse the repository at this point in the history
Because the function graph tracer can execute in sections where RCU is not
"watching", the rcu_dereference_sched() for the has needs to be open coded.
This is fine because the RCU "flavor" of the ftrace hash is protected by
its own RCU handling (it does its own little synchronization on every CPU
and does not rely on RCU sched).

Acked-by: Joel Fernandes (Google) <[email protected]>
Signed-off-by: Steven Rostedt (VMware) <[email protected]>
  • Loading branch information
rostedt committed Feb 5, 2020
1 parent fd0e685 commit 16052dd
Showing 1 changed file with 10 additions and 0 deletions.
10 changes: 10 additions & 0 deletions kernel/trace/trace.h
Original file line number Diff line number Diff line change
Expand Up @@ -975,6 +975,11 @@ static inline int ftrace_graph_addr(struct ftrace_graph_ent *trace)

preempt_disable_notrace();

/*
* Have to open code "rcu_dereference_sched()" because the
* function graph tracer can be called when RCU is not
* "watching".
*/
hash = rcu_dereference_protected(ftrace_graph_hash, !preemptible());

if (ftrace_hash_empty(hash)) {
Expand Down Expand Up @@ -1022,6 +1027,11 @@ static inline int ftrace_graph_notrace_addr(unsigned long addr)

preempt_disable_notrace();

/*
* Have to open code "rcu_dereference_sched()" because the
* function graph tracer can be called when RCU is not
* "watching".
*/
notrace_hash = rcu_dereference_protected(ftrace_graph_notrace_hash,
!preemptible());

Expand Down

0 comments on commit 16052dd

Please sign in to comment.