mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-28 11:49:32 +00:00
rcu/tree: Add comment to describe GP-done condition in fqs loop
Add a comment to explain why !rcu_preempt_blocked_readers_cgp() condition is required on root rnp node, for GP completion check in rcu_gp_fqs_loop(). Reviewed-by: Joel Fernandes (Google) <joel@joelfernandes.org> Signed-off-by: Neeraj Upadhyay <quic_neeraju@quicinc.com> Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
This commit is contained in:
parent
9bdb5b3a8d
commit
a03ae49c47
1 changed files with 9 additions and 1 deletions
|
@ -2005,7 +2005,15 @@ static noinline_for_stack void rcu_gp_fqs_loop(void)
|
|||
rcu_gp_torture_wait();
|
||||
WRITE_ONCE(rcu_state.gp_state, RCU_GP_DOING_FQS);
|
||||
/* Locking provides needed memory barriers. */
|
||||
/* If grace period done, leave loop. */
|
||||
/*
|
||||
* Exit the loop if the root rcu_node structure indicates that the grace period
|
||||
* has ended, leave the loop. The rcu_preempt_blocked_readers_cgp(rnp) check
|
||||
* is required only for single-node rcu_node trees because readers blocking
|
||||
* the current grace period are queued only on leaf rcu_node structures.
|
||||
* For multi-node trees, checking the root node's ->qsmask suffices, because a
|
||||
* given root node's ->qsmask bit is cleared only when all CPUs and tasks from
|
||||
* the corresponding leaf nodes have passed through their quiescent state.
|
||||
*/
|
||||
if (!READ_ONCE(rnp->qsmask) &&
|
||||
!rcu_preempt_blocked_readers_cgp(rnp))
|
||||
break;
|
||||
|
|
Loading…
Reference in a new issue