diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2011-10-05 18:59:38 (GMT) |
---|---|---|
committer | Scott Wood <scottwood@freescale.com> | 2014-04-10 00:19:33 (GMT) |
commit | df063b3e0f2dda8825336c34116cadd07a929757 (patch) | |
tree | 0bc5b8da5ca4726bf97e47c4822cf7829c399339 /kernel/rcupdate.c | |
parent | 4d85f8825a4e7d261aec080a07c94f1a6c63493a (diff) | |
download | linux-fsl-qoriq-df063b3e0f2dda8825336c34116cadd07a929757.tar.xz |
rcu: Merge RCU-bh into RCU-preempt
The Linux kernel has long RCU-bh read-side critical sections that
intolerably increase scheduling latency under mainline's RCU-bh rules,
which include RCU-bh read-side critical sections being non-preemptible.
This patch therefore arranges for RCU-bh to be implemented in terms of
RCU-preempt for CONFIG_PREEMPT_RT_FULL=y.
This has the downside of defeating the purpose of RCU-bh, namely,
handling the case where the system is subjected to a network-based
denial-of-service attack that keeps at least one CPU doing full-time
softirq processing. This issue will be fixed by a later commit.
The current commit will need some work to make it appropriate for
mainline use, for example, it needs to be extended to cover Tiny RCU.
[ paulmck: Added a useful changelog ]
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Link: http://lkml.kernel.org/r/20111005185938.GA20403@linux.vnet.ibm.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'kernel/rcupdate.c')
-rw-r--r-- | kernel/rcupdate.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/kernel/rcupdate.c b/kernel/rcupdate.c index b02a339..7e1dd3e 100644 --- a/kernel/rcupdate.c +++ b/kernel/rcupdate.c @@ -129,6 +129,7 @@ int notrace debug_lockdep_rcu_enabled(void) } EXPORT_SYMBOL_GPL(debug_lockdep_rcu_enabled); +#ifndef CONFIG_PREEMPT_RT_FULL /** * rcu_read_lock_bh_held() - might we be in RCU-bh read-side critical section? * @@ -155,6 +156,7 @@ int rcu_read_lock_bh_held(void) return in_softirq() || irqs_disabled(); } EXPORT_SYMBOL_GPL(rcu_read_lock_bh_held); +#endif #endif /* #ifdef CONFIG_DEBUG_LOCK_ALLOC */ |