On Wed, Feb 12, 2020 at 10:01:41PM +0100, Peter Zijlstra wrote: > Since rcu_is_watching() is notrace (and needs to be, as it can be > called from the tracers), make sure everything it in turn calls is > notrace too. > > To that effect, mark rcu_dynticks_curr_cpu_in_eqs() inline, which > implies notrace, as the function is tiny. > > Signed-off-by: Peter Zijlstra (Intel) <peterz@xxxxxxxxxxxxx> > --- > kernel/rcu/tree.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > --- a/kernel/rcu/tree.c > +++ b/kernel/rcu/tree.c > @@ -294,7 +294,7 @@ static void rcu_dynticks_eqs_online(void > * > * No ordering, as we are sampling CPU-local information. > */ > -static bool rcu_dynticks_curr_cpu_in_eqs(void) > +static inline bool rcu_dynticks_curr_cpu_in_eqs(void) I think there are ways to turn off function inlining, such as gcc's: -fkeep-inline-functions And just to be sure weird compilers (clang *cough*) don't screw this up, could we make it static inline notrace? Build tested it on the tip tree on top of your patch: ---8<----------------------- diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c index f3cb824fe5bbf..078d56951c8e7 100644 --- a/kernel/rcu/tree.c +++ b/kernel/rcu/tree.c @@ -294,7 +294,7 @@ static void rcu_dynticks_eqs_online(void) * * No ordering, as we are sampling CPU-local information. */ -static inline bool rcu_dynticks_curr_cpu_in_eqs(void) +static inline notrace bool rcu_dynticks_curr_cpu_in_eqs(void) { struct rcu_data *rdp = this_cpu_ptr(&rcu_data);