diff options
| author | Puranjay Mohan <puranjay@kernel.org> | 2026-06-24 06:23:52 -0700 |
|---|---|---|
| committer | Paul E. McKenney <paulmck@kernel.org> | 2026-07-24 16:57:29 -0700 |
| commit | ec5ee5417b00278fa050b38d878b76f1365420fb (patch) | |
| tree | fb6cd8c1d6a60256075a2c16b50a339ece36c724 /scripts/objdiff | |
| parent | fde2b18817e4f32b92c1e9881356fbc314983a7a (diff) | |
| download | linux-stable-ec5ee5417b00278fa050b38d878b76f1365420fb.tar.gz linux-stable-ec5ee5417b00278fa050b38d878b76f1365420fb.zip | |
rcu: Advance callbacks for expedited GP completion in rcu_core()
Even when rcu_pending() triggers rcu_core(), the normal callback
advancement path through note_gp_changes() -> __note_gp_changes() bails
out when rdp->gp_seq == rnp->gp_seq (no normal GP change). Since
expedited GPs do not update rnp->gp_seq, rcu_advance_cbs() is never
called and callbacks remain stuck in RCU_WAIT_TAIL.
Add a direct callback advancement block in rcu_core() that checks for GP
completion via rcu_segcblist_nextgp() combined with
poll_state_synchronize_rcu_full(). When detected, trylock rnp and call
rcu_advance_cbs() to move completed callbacks to RCU_DONE_TAIL. Wake the
GP kthread if rcu_advance_cbs() requests a new grace period.
Uses trylock to avoid adding contention on rnp->lock. If the lock is
contended, callbacks will be advanced on the next tick.
Reviewed-by: Paul E. McKenney <paulmck@kernel.org>
Signed-off-by: Puranjay Mohan <puranjay@kernel.org>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
Diffstat (limited to 'scripts/objdiff')
0 files changed, 0 insertions, 0 deletions
