Index: linux-stable/kernel/softirq.c =================================================================== --- linux-stable.orig/kernel/softirq.c +++ linux-stable/kernel/softirq.c @@ -100,20 +100,15 @@ void softirq_check_pending_idle(void) { static int rate_limit; struct softirq_runner *sr = &__get_cpu_var(softirq_runners); - u32 warnpending, pending = local_softirq_pending(); + u32 warnpending = local_softirq_pending(); + int i; if (rate_limit >= 10) return; - warnpending = pending; - - while (pending) { - struct task_struct *tsk; - int i = __ffs(pending); - - pending &= ~(1 << i); + for (i = 0; i < NR_SOFTIRQS; i++) { + struct task_struct *tsk = sr->runner[i]; - tsk = sr->runner[i]; /* * The wakeup code in rtmutex.c wakes up the task * _before_ it sets pi_blocked_on to NULL under @@ -638,7 +633,7 @@ static void do_raise_softirq_irqoff(unsi void __raise_softirq_irqoff(unsigned int nr) { do_raise_softirq_irqoff(nr); - if (WARN_ON_ONCE(!in_irq() && !current->softirq_nestcnt)) + if (!in_irq() && !current->softirq_nestcnt) wakeup_softirqd(); } Index: linux-stable/localversion-rt =================================================================== --- linux-stable.orig/localversion-rt +++ linux-stable/localversion-rt @@ -1 +1 @@ --rt16 +-rt17