From 750e37efdacaf1d6f3d369ab6d91ba958a9f02d0 Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Sun, 13 Nov 2011 17:17:09 +0100 Subject: 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 Signed-off-by: Thomas Gleixner Cc: stable-rt@vger.kernel.org Signed-off-by: Steven Rostedt --- include/linux/preempt.h | 3 +++ 1 file changed, 3 insertions(+) (limited to 'include') diff --git a/include/linux/preempt.h b/include/linux/preempt.h index ccda8ec737c8..1c5af6164130 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() \ @@ -99,6 +101,7 @@ do { \ #define preempt_enable_no_resched() barrier() #define preempt_enable() barrier() #define preempt_check_resched() barrier() +#define preempt_check_resched_rt() barrier() #define preempt_disable_notrace() barrier() #define preempt_enable_no_resched_notrace() barrier() -- cgit v1.2.3