summaryrefslogtreecommitdiffstats
path: root/kernel/rcu/tree_trace.c
diff options
context:
space:
mode:
authorPeter Zijlstra <peterz@infradead.org>2015-06-25 20:27:10 +0200
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>2015-07-17 23:58:50 +0200
commit3a6d7c64d78a78d279851524d39999637a549363 (patch)
treec45c280d3805f73b028352a4b4d9b70663a513fd /kernel/rcu/tree_trace.c
parentrcu: Get rid of synchronize_sched_expedited()'s polling loop (diff)
downloadlinux-3a6d7c64d78a78d279851524d39999637a549363.tar.xz
linux-3a6d7c64d78a78d279851524d39999637a549363.zip
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.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/kernel/rcu/tree_trace.c b/kernel/rcu/tree_trace.c
index d2aab8dcd58e..36c04b46d3b8 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;
}