On Mon, Jan 19, 2026 at 06:12:22PM -0500, Joel Fernandes wrote: > During callback overload (exceeding qhimark), the NOCB code attempts > opportunistic advancement via rcu_advance_cbs_nowake(). Analysis shows > this entire code path is dead: > > - 30 overload conditions triggered with 300,000 callback flood > - 0 advancements actually occurred > - 100% of time blocked because current GP not done > > The overload condition triggers when callbacks are coming in at a high > rate with GPs not completing as fast. But the advancement requires the > GP to be complete - a logical contradiction. Even if the GP did complete > in time, nocb_gp_wait() has to wake up anyway to do the advancement, so > it is pointless. > > Since the advancement is dead code, the entire overload handling block > serves no purpose. Remove it entirely. > > Suggested-by: Frederic Weisbecker <[email protected]> > Signed-off-by: Joel Fernandes <[email protected]>
Reviewed-by: Paul E. McKenney <[email protected]> > --- > kernel/rcu/tree_nocb.h | 12 ------------ > 1 file changed, 12 deletions(-) > > diff --git a/kernel/rcu/tree_nocb.h b/kernel/rcu/tree_nocb.h > index f525e4f7985b..64a8ff350f92 100644 > --- a/kernel/rcu/tree_nocb.h > +++ b/kernel/rcu/tree_nocb.h > @@ -526,8 +526,6 @@ static void __call_rcu_nocb_wake(struct rcu_data *rdp, > bool was_alldone, > __releases(rdp->nocb_lock) > { > long bypass_len; > - unsigned long cur_gp_seq; > - unsigned long j; > long lazy_len; > long len; > struct task_struct *t; > @@ -562,16 +560,6 @@ static void __call_rcu_nocb_wake(struct rcu_data *rdp, > bool was_alldone, > } > > return; > - } else if (len > rdp->qlen_last_fqs_check + qhimark) { > - /* ... or if many callbacks queued. */ > - rdp->qlen_last_fqs_check = len; > - j = jiffies; > - if (j != rdp->nocb_gp_adv_time && > - rcu_segcblist_nextgp(&rdp->cblist, &cur_gp_seq) && > - rcu_seq_done(&rdp->mynode->gp_seq, cur_gp_seq)) { > - rcu_advance_cbs_nowake(rdp->mynode, rdp); > - rdp->nocb_gp_adv_time = j; > - } > } > > rcu_nocb_unlock(rdp); > -- > 2.34.1 >

