diff options
author | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2018-05-03 13:40:25 -0700 |
---|---|---|
committer | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2018-07-12 15:39:06 -0700 |
commit | f34f2f5852e556ee1c3b3b294571086b1791008a (patch) | |
tree | 499c355393046ecce8036cc39b52b98fc60c539e /kernel/rcu | |
parent | 1f3e5f51b933cbc25e3da0cdbdac40716df04ddb (diff) | |
download | linux-stable-f34f2f5852e556ee1c3b3b294571086b1791008a.tar.gz linux-stable-f34f2f5852e556ee1c3b3b294571086b1791008a.tar.bz2 linux-stable-f34f2f5852e556ee1c3b3b294571086b1791008a.zip |
rcu: Move grace-period pre-init delay after pre-init
The main race with the early part of grace-period initialization appears
to be with CPU hotplug. To more fully open this race window, this commit
moves the rcu_gp_slow() from the beginning of the early initialization
loop to follow that loop, thus widening the race window, especially for
the rcu_node structures that are initialized last. This commit also
expands rcutree.gp_preinit_delay from 3 to 12, giving the same overall
delay in the grace period, but concentrated in the spot where it will
do the most good.
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Diffstat (limited to 'kernel/rcu')
-rw-r--r-- | kernel/rcu/tree.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c index 50e4f7ebf8cf..c577cadcc4f8 100644 --- a/kernel/rcu/tree.c +++ b/kernel/rcu/tree.c @@ -1900,7 +1900,6 @@ static bool rcu_gp_init(struct rcu_state *rsp) * will handle subsequent offline CPUs. */ rcu_for_each_leaf_node(rsp, rnp) { - rcu_gp_slow(rsp, gp_preinit_delay); spin_lock(&rsp->ofl_lock); raw_spin_lock_irq_rcu_node(rnp); if (rnp->qsmaskinit == rnp->qsmaskinitnext && @@ -1945,6 +1944,7 @@ static bool rcu_gp_init(struct rcu_state *rsp) raw_spin_unlock_irq_rcu_node(rnp); spin_unlock(&rsp->ofl_lock); } + rcu_gp_slow(rsp, gp_preinit_delay); /* Races with CPU hotplug. */ /* * Set the quiescent-state-needed bits in all the rcu_node |