Re: [PATCH RT] tasklet/rt: Prevent tasklets from going into infinite spin in RT
From: Mike Galbraith <hidden>
Date: 2011-11-30 13:04:47
Also in:
lkml
From: Mike Galbraith <hidden>
Date: 2011-11-30 13:04:47
Also in:
lkml
On Wed, 2011-11-30 at 13:45 +0100, Mike Galbraith wrote:
On Wed, 2011-11-30 at 11:24 +0100, Thomas Gleixner wrote:quoted
On Wed, 30 Nov 2011, Mike Galbraith wrote:
quoted
quoted
@@ -131,11 +155,18 @@ void softirq_check_pending_idle(void) */ static void wakeup_softirqd(void) { - /* Interrupts are disabled: no need to stop preemption */ - struct task_struct *tsk = __this_cpu_read(ksoftirqd); + struct task_struct *tsk; + u32 pending = local_softirq_pending(), mask, i; - if (tsk && tsk->state != TASK_RUNNING) - wake_up_process(tsk); + /* Interrupts are disabled: no need to stop preemption */ + for (i = 0; pending && i < NR_SOFTIRQ_THREADS; i++) { + mask = __get_cpu_var(ksoftirqd)[i].mask; + if (!(pending & mask)) + continue; + tsk = __get_cpu_var(ksoftirqd)[i].tsk; + if (tsk && tsk->state != TASK_RUNNING) + wake_up_process(tsk); + } }Dammned serious is seems. :)
'course here I should have just used the busy bits directly. -Mike