On Fri, 14 Feb 2020 15:55:59 -0800 paulmck@xxxxxxxxxx wrote: > @@ -1252,10 +1252,10 @@ static bool rcu_future_gp_cleanup(struct rcu_node *rnp) > */ > static void rcu_gp_kthread_wake(void) > { > - if ((current == rcu_state.gp_kthread && > + if ((current == READ_ONCE(rcu_state.gp_kthread) && > !in_irq() && !in_serving_softirq()) || > !READ_ONCE(rcu_state.gp_flags) || > - !rcu_state.gp_kthread) > + !READ_ONCE(rcu_state.gp_kthread)) > return; This looks buggy. You have two instances of READ_ONCE(rcu_state.gp_thread), which means they can be different. Is that intentional? -- Steve