Messages in this thread Patch in this message | | | From | "Paul E. McKenney" <> | Subject | [PATCH rcu 14/19] srcu: Explain srcu_funnel_gp_start() call to list_add() is safe | Date | Fri, 4 Feb 2022 15:38:57 -0800 |
| |
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!
Signed-off-by: Paul E. McKenney <paulmck@kernel.org> --- kernel/rcu/srcutree.c | 6 ++++++ 1 file changed, 6 insertions(+)
diff --git a/kernel/rcu/srcutree.c b/kernel/rcu/srcutree.c index 39dc3015dfeba..d16104405c8f9 100644 --- a/kernel/rcu/srcutree.c +++ b/kernel/rcu/srcutree.c @@ -757,6 +757,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)); -- 2.31.1.189.g2e36527f23
| |