summaryrefslogtreecommitdiffstats
path: root/kernel/rcu
diff options
context:
space:
mode:
authorFrederic Weisbecker <frederic@kernel.org>2023-12-19 00:19:16 +0100
committerBoqun Feng <boqun.feng@gmail.com>2024-02-14 07:51:35 -0800
commita7e4074dccd282f494d542150ef6235b3270b0a2 (patch)
treee8ba33ef84a11aa0fae9c361b9065719ff60c98b /kernel/rcu
parent41bccc98fb7931d63d03f326a746ac4d429c1dd3 (diff)
downloadlinux-a7e4074dccd282f494d542150ef6235b3270b0a2.tar.gz
linux-a7e4074dccd282f494d542150ef6235b3270b0a2.tar.bz2
linux-a7e4074dccd282f494d542150ef6235b3270b0a2.zip
rcu/exp: Remove full barrier upon main thread wakeup
When an expedited grace period is ending, care must be taken so that all the quiescent states propagated up to the root are correctly ordered against the wake up of the main expedited grace period workqueue. This ordering is already carried through the root rnp locking augmented by an smp_mb__after_unlock_lock() barrier. Therefore the explicit smp_mb() placed before the wake up is not needed and can be removed. Signed-off-by: Frederic Weisbecker <frederic@kernel.org> Reviewed-by: Paul E. McKenney <paulmck@kernel.org> Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
Diffstat (limited to 'kernel/rcu')
-rw-r--r--kernel/rcu/tree_exp.h5
1 files changed, 2 insertions, 3 deletions
diff --git a/kernel/rcu/tree_exp.h b/kernel/rcu/tree_exp.h
index 2ac440bc7e10..014ddf672165 100644
--- a/kernel/rcu/tree_exp.h
+++ b/kernel/rcu/tree_exp.h
@@ -198,10 +198,9 @@ static void __rcu_report_exp_rnp(struct rcu_node *rnp,
}
if (rnp->parent == NULL) {
raw_spin_unlock_irqrestore_rcu_node(rnp, flags);
- if (wake) {
- smp_mb(); /* EGP done before wake_up(). */
+ if (wake)
swake_up_one_online(&rcu_state.expedited_wq);
- }
+
break;
}
mask = rnp->grpmask;