diff options
author | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2016-06-29 13:46:25 -0700 |
---|---|---|
committer | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2016-08-22 09:30:25 -0700 |
commit | 8b355e3bc1408be238ae4695fb6318ae502cae8e (patch) | |
tree | f923d1cb005f3102e76cd0b2f64567ed80f67c7a /kernel/rcu/tree.h | |
parent | f7b8eb847e35b18d3ec333774691a905bf16017f (diff) | |
download | op-kernel-dev-8b355e3bc1408be238ae4695fb6318ae502cae8e.zip op-kernel-dev-8b355e3bc1408be238ae4695fb6318ae502cae8e.tar.gz |
rcu: Drive expedited grace periods from workqueue
The current implementation of expedited grace periods has the user
task drive the grace period. This works, but has downsides: (1) The
user task must awaken tasks piggybacking on this grace period, which
can result in latencies rivaling that of the grace period itself, and
(2) User tasks can receive signals, which interfere with RCU CPU stall
warnings.
This commit therefore uses workqueues to drive the grace periods, so
that the user task need not do the awakening. A subsequent commit
will remove the now-unnecessary code allowing for signals.
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Diffstat (limited to 'kernel/rcu/tree.h')
-rw-r--r-- | kernel/rcu/tree.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/kernel/rcu/tree.h b/kernel/rcu/tree.h index f714f87..e99a523 100644 --- a/kernel/rcu/tree.h +++ b/kernel/rcu/tree.h @@ -400,6 +400,7 @@ struct rcu_data { #ifdef CONFIG_RCU_FAST_NO_HZ struct rcu_head oom_head; #endif /* #ifdef CONFIG_RCU_FAST_NO_HZ */ + atomic_long_t exp_workdone0; /* # done by workqueue. */ atomic_long_t exp_workdone1; /* # done by others #1. */ atomic_long_t exp_workdone2; /* # done by others #2. */ atomic_long_t exp_workdone3; /* # done by others #3. */ |