summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2011-11-13 17:17:09 +0100
committerClark Williams <williams@redhat.com>2012-03-24 10:27:28 -0500
commit6412b21cf6139ceeea2b2e8fce7daf727ce1ec52 (patch)
tree2c6567da33528e64bb2b9a91aa1296250dc4eb12 /include
parentade502b3ae55691a6d3e32935c2c8aa4199b3d89 (diff)
softirq: Check preemption after reenabling interrupts
raise_softirq_irqoff() disables interrupts and wakes the softirq daemon, but after reenabling interrupts there is no preemption check, so the execution of the softirq thread might be delayed arbitrarily. In principle we could add that check to local_irq_enable/restore, but that's overkill as the rasie_softirq_irqoff() sections are the only ones which show this behaviour. Reported-by: Carsten Emde <cbe@osadl.org> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: stable-rt@vger.kernel.org
Diffstat (limited to 'include')
-rw-r--r--include/linux/preempt.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/include/linux/preempt.h b/include/linux/preempt.h
index 6450c0113b5b..58d898278720 100644
--- a/include/linux/preempt.h
+++ b/include/linux/preempt.h
@@ -56,8 +56,10 @@ do { \
#ifndef CONFIG_PREEMPT_RT_BASE
# define preempt_enable_no_resched() __preempt_enable_no_resched()
+# define preempt_check_resched_rt() do { } while (0)
#else
# define preempt_enable_no_resched() preempt_enable()
+# define preempt_check_resched_rt() preempt_check_resched()
#endif
#define preempt_enable() \
@@ -105,6 +107,7 @@ do { \
#define preempt_disable_notrace() do { } while (0)
#define preempt_enable_no_resched_notrace() do { } while (0)
#define preempt_enable_notrace() do { } while (0)
+#define preempt_check_resched_rt() do { } while (0)
#endif /* CONFIG_PREEMPT_COUNT */