Thread (12 messages) 12 messages, 7 authors, 2011-12-01

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

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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help