diff options
author | Peter Zijlstra <peterz@infradead.org> | 2015-06-25 11:27:10 -0700 |
---|---|---|
committer | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2015-07-17 14:58:50 -0700 |
commit | 3a6d7c64d78a78d279851524d39999637a549363 (patch) | |
tree | c45c280d3805f73b028352a4b4d9b70663a513fd /kernel/rcu/tree_trace.c | |
parent | 385b73c06f6a733547d0a7714d0c4cb4c8788b88 (diff) | |
download | op-kernel-dev-3a6d7c64d78a78d279851524d39999637a549363.zip op-kernel-dev-3a6d7c64d78a78d279851524d39999637a549363.tar.gz |
rcu: Make expedited GP CPU stoppage asynchronous
Sequentially stopping the CPUs slows down expedited grace periods by
at least a factor of two, based on rcutorture's grace-period-per-second
rate. This is a conservative measure because rcutorture uses unusually
long RCU read-side critical sections and because rcutorture periodically
quiesces the system in order to test RCU's ability to ramp down to and
up from the idle state. This commit therefore replaces the stop_one_cpu()
with stop_one_cpu_nowait(), using an atomic-counter scheme to determine
when all CPUs have passed through the stopped state.
Signed-off-by: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Diffstat (limited to 'kernel/rcu/tree_trace.c')
-rw-r--r-- | kernel/rcu/tree_trace.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/kernel/rcu/tree_trace.c b/kernel/rcu/tree_trace.c index d2aab8d..36c04b4 100644 --- a/kernel/rcu/tree_trace.c +++ b/kernel/rcu/tree_trace.c @@ -185,12 +185,13 @@ static int show_rcuexp(struct seq_file *m, void *v) { struct rcu_state *rsp = (struct rcu_state *)m->private; - seq_printf(m, "t=%lu tf=%lu wd1=%lu wd2=%lu n=%lu sc=%lu\n", + seq_printf(m, "t=%lu tf=%lu wd1=%lu wd2=%lu n=%lu enq=%d sc=%lu\n", rsp->expedited_sequence, atomic_long_read(&rsp->expedited_tryfail), atomic_long_read(&rsp->expedited_workdone1), atomic_long_read(&rsp->expedited_workdone2), atomic_long_read(&rsp->expedited_normal), + atomic_read(&rsp->expedited_need_qs), rsp->expedited_sequence / 2); return 0; } |