ftrace: Add comment to why rcu_dereference_sched() is open coded

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: default avatarJoel Fernandes (Google) <joel@joelfernandes.org>
Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
parent fd0e6852
...@@ -975,6 +975,11 @@ static inline int ftrace_graph_addr(struct ftrace_graph_ent *trace) ...@@ -975,6 +975,11 @@ static inline int ftrace_graph_addr(struct ftrace_graph_ent *trace)
preempt_disable_notrace(); 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()); hash = rcu_dereference_protected(ftrace_graph_hash, !preemptible());
if (ftrace_hash_empty(hash)) { if (ftrace_hash_empty(hash)) {
...@@ -1022,6 +1027,11 @@ static inline int ftrace_graph_notrace_addr(unsigned long addr) ...@@ -1022,6 +1027,11 @@ static inline int ftrace_graph_notrace_addr(unsigned long addr)
preempt_disable_notrace(); 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, notrace_hash = rcu_dereference_protected(ftrace_graph_notrace_hash,
!preemptible()); !preemptible());
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment