diff options
author | Antti P Miettinen <ananaza@iki.fi> | 2012-10-05 02:59:15 -0400 |
---|---|---|
committer | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2012-10-23 17:54:08 -0400 |
commit | 3705b88db0d7cc4a097c32d9e554054103d3f807 (patch) | |
tree | f3baf8c94363506964c9f944496267f74cdee47c /kernel/rcutree_plugin.h | |
parent | ba49df4767d4fa5bbd2af3a51709fb81f94264ec (diff) |
rcu: Add a module parameter to force use of expedited RCU primitives
There have been some embedded applications that would benefit from
use of expedited grace-period primitives. In some ways, this is
similar to synchronize_net() doing either a normal or an expedited
grace period depending on lock state, but with control outside of
the kernel.
This commit therefore adds rcu_expedited boot and sysfs parameters
that cause the kernel to substitute expedited primitives for the
normal grace-period primitives.
[ paulmck: Add trace/event/rcu.h to kernel/srcu.c to avoid build error.
Get rid of infinite loop through contention path.]
Signed-off-by: Antti P Miettinen <amiettinen@nvidia.com>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Diffstat (limited to 'kernel/rcutree_plugin.h')
-rw-r--r-- | kernel/rcutree_plugin.h | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/kernel/rcutree_plugin.h b/kernel/rcutree_plugin.h index f92115488187..c177ba0cce9a 100644 --- a/kernel/rcutree_plugin.h +++ b/kernel/rcutree_plugin.h | |||
@@ -679,7 +679,10 @@ void synchronize_rcu(void) | |||
679 | "Illegal synchronize_rcu() in RCU read-side critical section"); | 679 | "Illegal synchronize_rcu() in RCU read-side critical section"); |
680 | if (!rcu_scheduler_active) | 680 | if (!rcu_scheduler_active) |
681 | return; | 681 | return; |
682 | wait_rcu_gp(call_rcu); | 682 | if (rcu_expedited) |
683 | synchronize_rcu_expedited(); | ||
684 | else | ||
685 | wait_rcu_gp(call_rcu); | ||
683 | } | 686 | } |
684 | EXPORT_SYMBOL_GPL(synchronize_rcu); | 687 | EXPORT_SYMBOL_GPL(synchronize_rcu); |
685 | 688 | ||
@@ -831,7 +834,7 @@ void synchronize_rcu_expedited(void) | |||
831 | udelay(trycount * num_online_cpus()); | 834 | udelay(trycount * num_online_cpus()); |
832 | } else { | 835 | } else { |
833 | put_online_cpus(); | 836 | put_online_cpus(); |
834 | synchronize_rcu(); | 837 | wait_rcu_gp(call_rcu); |
835 | return; | 838 | return; |
836 | } | 839 | } |
837 | } | 840 | } |