diff options
author | Paul E. McKenney <paulmck@kernel.org> | 2022-01-27 13:47:42 -0800 |
---|---|---|
committer | Paul E. McKenney <paulmck@kernel.org> | 2022-04-11 15:52:30 -0700 |
commit | ee5e2448bceb9400aa27207f0c0220f9dedd85eb (patch) | |
tree | ce40ef89270381a2febdd77a0bb8f928db3e0478 /kernel/rcu/srcutree.c | |
parent | 46470cf85d2b61abd37c6f66c4dacc1bc510d10f (diff) | |
download | linux-stable-ee5e2448bceb9400aa27207f0c0220f9dedd85eb.tar.gz linux-stable-ee5e2448bceb9400aa27207f0c0220f9dedd85eb.tar.bz2 linux-stable-ee5e2448bceb9400aa27207f0c0220f9dedd85eb.zip |
srcu: Explain srcu_funnel_gp_start() call to list_add() is safe
This commit adds a comment explaining why an unprotected call to
list_add() from srcu_funnel_gp_start() can be safe. TL;DR: It is only
called during very early boot when we don't have no steeking concurrency!
Co-developed-by: Neeraj Upadhyay <quic_neeraju@quicinc.com>
Signed-off-by: Neeraj Upadhyay <quic_neeraju@quicinc.com>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
Diffstat (limited to 'kernel/rcu/srcutree.c')
-rw-r--r-- | kernel/rcu/srcutree.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/kernel/rcu/srcutree.c b/kernel/rcu/srcutree.c index 7209fd95dde9..64993a172cff 100644 --- a/kernel/rcu/srcutree.c +++ b/kernel/rcu/srcutree.c @@ -776,6 +776,12 @@ static void srcu_funnel_gp_start(struct srcu_struct *ssp, struct srcu_data *sdp, rcu_seq_state(ssp->srcu_gp_seq) == SRCU_STATE_IDLE) { WARN_ON_ONCE(ULONG_CMP_GE(ssp->srcu_gp_seq, ssp->srcu_gp_seq_needed)); srcu_gp_start(ssp); + + // And how can that list_add() in the "else" clause + // possibly be safe for concurrent execution? Well, + // it isn't. And it does not have to be. After all, it + // can only be executed during early boot when there is only + // the one boot CPU running with interrupts still disabled. if (likely(srcu_init_done)) queue_delayed_work(rcu_gp_wq, &ssp->work, srcu_get_delay(ssp)); |