On Mon, Jan 23, 2023 at 10:22:19AM -0500, Joel Fernandes wrote: > > What am I missing? > > That the acceleration is also done by __note_gp_changes() once the > grace period ends anyway, so if any acceleration was missed as you > say, it will be done anyway. > > Also it is done by scheduler tick raising softirq: > > rcu_pending() does this: > /* Has RCU gone idle with this CPU needing another grace period? */ > if (!gp_in_progress && rcu_segcblist_is_enabled(&rdp->cblist) && > !rcu_rdp_is_offloaded(rdp) && > !rcu_segcblist_restempty(&rdp->cblist, RCU_NEXT_READY_TAIL)) > return 1; > > and rcu_core(): > /* No grace period and unregistered callbacks? */ > if (!rcu_gp_in_progress() && > rcu_segcblist_is_enabled(&rdp->cblist) && do_batch) { > rcu_nocb_lock_irqsave(rdp, flags); > if (!rcu_segcblist_restempty(&rdp->cblist, RCU_NEXT_READY_TAIL)) > rcu_accelerate_cbs_unlocked(rnp, rdp); > rcu_nocb_unlock_irqrestore(rdp, flags); > } > > So, I am not sure if you need needacc at all. Those CBs that have not > been assigned grace period numbers will be taken care off :) But that's only when there is no grace period pending, so it can't happen while we report a QS. OTOH without the needacc, those callbacks waiting to be accelerated would be eventually processed but only on the next tick following the end of a grace period...if none has started since then. So if someone else starts a new GP before the current CPU, we must wait another GP, etc... That's potentially dangerous. And unfortunately we can't do the acceleration from __note_gp_changes() due to lock ordering restrictions: nocb_lock -> rnp_lock > > Thanks! > > -Joel