From: "Steven Rostedt (Red Hat)" Some callbacks of the function tracer use rcu_read_lock(). This means that there's places that can not be traced because RCU is not tracking the CPU for various reasons (like NO_HZ_FULL and coming back from userspace). These functions need to be marked so that callbacks that use RCU do not trace them. Reviewed-by: Paul E. McKenney Signed-off-by: Steven Rostedt --- kernel/rcutiny.c | 1 + kernel/rcutree.c | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/kernel/rcutiny.c b/kernel/rcutiny.c index aa34411..911a61c 100644 --- a/kernel/rcutiny.c +++ b/kernel/rcutiny.c @@ -173,6 +173,7 @@ void rcu_irq_enter(void) local_irq_restore(flags); } EXPORT_SYMBOL_GPL(rcu_irq_enter); +FTRACE_UNSAFE_RCU(rcu_irq_enter); #ifdef CONFIG_DEBUG_LOCK_ALLOC diff --git a/kernel/rcutree.c b/kernel/rcutree.c index 068de3a..ca53562 100644 --- a/kernel/rcutree.c +++ b/kernel/rcutree.c @@ -53,6 +53,7 @@ #include #include #include +#include #include "rcutree.h" #include @@ -373,6 +374,7 @@ static void rcu_eqs_enter_common(struct rcu_dynticks *rdtp, long long oldval, rcu_lockdep_assert(!lock_is_held(&rcu_sched_lock_map), "Illegal idle entry in RCU-sched read-side critical section."); } +FTRACE_UNSAFE_RCU(rcu_eqs_enter_common); /* * Enter an RCU extended quiescent state, which can be either the @@ -392,6 +394,7 @@ static void rcu_eqs_enter(bool user) rdtp->dynticks_nesting -= DYNTICK_TASK_NEST_VALUE; rcu_eqs_enter_common(rdtp, oldval, user); } +FTRACE_UNSAFE_RCU(rcu_eqs_enter); /** * rcu_idle_enter - inform RCU that current CPU is entering idle @@ -513,6 +516,7 @@ static void rcu_eqs_exit_common(struct rcu_dynticks *rdtp, long long oldval, idle->pid, idle->comm); /* must be idle task! */ } } +FTRACE_UNSAFE_RCU(rcu_eqs_exit_common); /* * Exit an RCU extended quiescent state, which can be either the @@ -553,6 +557,7 @@ void rcu_idle_exit(void) local_irq_restore(flags); } EXPORT_SYMBOL_GPL(rcu_idle_exit); +FTRACE_UNSAFE_RCU(rcu_idle_exit); #ifdef CONFIG_RCU_USER_QS /** @@ -565,6 +570,7 @@ void rcu_user_exit(void) { rcu_eqs_exit(1); } +FTRACE_UNSAFE_RCU(rcu_user_exit); /** * rcu_user_exit_after_irq - inform RCU that we won't resume to userspace @@ -625,6 +631,7 @@ void rcu_irq_enter(void) rcu_eqs_exit_common(rdtp, oldval, true); local_irq_restore(flags); } +FTRACE_UNSAFE_RCU(rcu_irq_enter); /** * rcu_nmi_enter - inform RCU of entry to NMI context -- 1.7.10.4 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/