aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/rcu/tree_trace.c
diff options
context:
space:
mode:
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>2015-06-24 13:46:30 -0400
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>2015-07-17 17:58:47 -0400
commitd6ada2cf2f81dab8a231d0ef8fb5dec4f5ac8379 (patch)
tree8c238875b70f7a146dc231d8e2915d17be26a108 /kernel/rcu/tree_trace.c
parentc190c3b16c0f56ff338df12df53c03859155951b (diff)
rcu: Rework synchronize_sched_expedited() counter handling
Now that synchronize_sched_expedited() have a mutex, it can use simpler work-already-done detection scheme. This commit simplifies this scheme by using something similar to the sequence-locking counter scheme. A counter is incremented before and after each grace period, so that the counter is odd in the midst of the grace period and even otherwise. So if the counter has advanced to the second even number that is greater than or equal to the snapshot, the required grace period has already happened. 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.c12
1 files changed, 4 insertions, 8 deletions
diff --git a/kernel/rcu/tree_trace.c b/kernel/rcu/tree_trace.c
index 3ea7ffc7d5c4..a1ab3a5f6290 100644
--- a/kernel/rcu/tree_trace.c
+++ b/kernel/rcu/tree_trace.c
@@ -185,18 +185,14 @@ static int show_rcuexp(struct seq_file *m, void *v)
185{ 185{
186 struct rcu_state *rsp = (struct rcu_state *)m->private; 186 struct rcu_state *rsp = (struct rcu_state *)m->private;
187 187
188 seq_printf(m, "s=%lu d=%lu w=%lu tf=%lu wd1=%lu wd2=%lu n=%lu sc=%lu dt=%lu dl=%lu dx=%lu\n", 188 seq_printf(m, "t=%lu tf=%lu wd1=%lu wd2=%lu wd3=%lu n=%lu sc=%lu\n",
189 atomic_long_read(&rsp->expedited_start), 189 rsp->expedited_sequence,
190 atomic_long_read(&rsp->expedited_done),
191 atomic_long_read(&rsp->expedited_wrap),
192 atomic_long_read(&rsp->expedited_tryfail), 190 atomic_long_read(&rsp->expedited_tryfail),
193 atomic_long_read(&rsp->expedited_workdone1), 191 atomic_long_read(&rsp->expedited_workdone1),
194 atomic_long_read(&rsp->expedited_workdone2), 192 atomic_long_read(&rsp->expedited_workdone2),
193 rsp->expedited_workdone3,
195 atomic_long_read(&rsp->expedited_normal), 194 atomic_long_read(&rsp->expedited_normal),
196 atomic_long_read(&rsp->expedited_stoppedcpus), 195 rsp->expedited_sequence / 2);
197 atomic_long_read(&rsp->expedited_done_tries),
198 atomic_long_read(&rsp->expedited_done_lost),
199 atomic_long_read(&rsp->expedited_done_exit));
200 return 0; 196 return 0;
201} 197}
202 198