Commit f34f2f58 authored by Paul E. McKenney's avatar Paul E. McKenney

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: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
parent 1f3e5f51
...@@ -1900,7 +1900,6 @@ static bool rcu_gp_init(struct rcu_state *rsp) ...@@ -1900,7 +1900,6 @@ static bool rcu_gp_init(struct rcu_state *rsp)
* will handle subsequent offline CPUs. * will handle subsequent offline CPUs.
*/ */
rcu_for_each_leaf_node(rsp, rnp) { rcu_for_each_leaf_node(rsp, rnp) {
rcu_gp_slow(rsp, gp_preinit_delay);
spin_lock(&rsp->ofl_lock); spin_lock(&rsp->ofl_lock);
raw_spin_lock_irq_rcu_node(rnp); raw_spin_lock_irq_rcu_node(rnp);
if (rnp->qsmaskinit == rnp->qsmaskinitnext && if (rnp->qsmaskinit == rnp->qsmaskinitnext &&
...@@ -1945,6 +1944,7 @@ static bool rcu_gp_init(struct rcu_state *rsp) ...@@ -1945,6 +1944,7 @@ static bool rcu_gp_init(struct rcu_state *rsp)
raw_spin_unlock_irq_rcu_node(rnp); raw_spin_unlock_irq_rcu_node(rnp);
spin_unlock(&rsp->ofl_lock); 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 * Set the quiescent-state-needed bits in all the rcu_node
......
rcutorture.onoff_interval=1 rcutorture.onoff_holdoff=30 rcutorture.onoff_interval=1 rcutorture.onoff_holdoff=30
rcutree.gp_preinit_delay=3 rcutree.gp_preinit_delay=12
rcutree.gp_init_delay=3 rcutree.gp_init_delay=3
rcutree.gp_cleanup_delay=3 rcutree.gp_cleanup_delay=3
rcutree.kthread_prio=2 rcutree.kthread_prio=2
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment