On Mon, Aug 12, 2019 at 09:05:25PM -0400, Joel Fernandes wrote: > On Mon, Aug 12, 2019 at 09:02:49PM -0400, Joel Fernandes wrote: > [snip] > > > Thanx, Paul > > > > > > ------------------------------------------------------------------------ > > > > > > diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c > > > index 8c494a692728..ad906d6a74fb 100644 > > > --- a/kernel/rcu/tree.c > > > +++ b/kernel/rcu/tree.c > > > @@ -651,6 +651,12 @@ static __always_inline void rcu_nmi_exit_common(bool irq) > > > */ > > > if (rdp->dynticks_nmi_nesting != 1) { > > > trace_rcu_dyntick(TPS("--="), rdp->dynticks_nmi_nesting, rdp->dynticks_nmi_nesting - 2, rdp->dynticks); > > > + if (tick_nohz_full_cpu(rdp->cpu) && > > > + rdp->dynticks_nmi_nesting == 2 && > > > + rdp->rcu_urgent_qs && !rdp->rcu_forced_tick) { > > > + rdp->rcu_forced_tick = true; > > > + tick_dep_set_cpu(rdp->cpu, TICK_DEP_MASK_RCU); > > > + } > > > > > > Instead of checking dynticks_nmi_nesting == 2 in rcu_nmi_exit_common(), can > > we do the tick_dep_set_cpu(rdp->cpu, TICK_DEP_MASK_RCU) from > > rcu_nmi_enter_common() ? We could add this code there, under the "if > > (rcu_dynticks_curr_cpu_in_eqs())". > > Actually, the other way. if (!rcu_dynticks_curr_cpu_in_eqs()) then do the > tick_dep_set_cpu(). That does sound more likely. Still, need to work out what the breakage is. Thanx, Paul