diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2011-11-13 17:17:09 +0100 |
---|---|---|
committer | Steven Rostedt <rostedt@rostedt.homelinux.com> | 2012-10-26 14:31:52 -0400 |
commit | 2a534215a456785ba16176226c9563e545dfc4f6 (patch) | |
tree | 701087d6f45439be99b159b6cefff18129a18241 /include | |
parent | 3050d6f3fdf3c61d060212196cfe05d4605217f8 (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
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/preempt.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/include/linux/preempt.h b/include/linux/preempt.h index 7a2bbbb82902..11412d7d9e43 100644 --- a/include/linux/preempt.h +++ b/include/linux/preempt.h @@ -41,8 +41,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_check_resched() \ @@ -93,6 +95,7 @@ do { \ #define preempt_enable_no_resched() do { } while (0) #define preempt_enable() do { } while (0) #define preempt_check_resched() do { } while (0) +#define preempt_check_resched_rt() do { } while (0) #define preempt_disable_notrace() do { } while (0) #define preempt_enable_no_resched_notrace() do { } while (0) |