Ensure that we only offline the processor when it's safe and never run 
softirqs in another processor's ksoftirqd context. This also gets rid of 
the warnings in ksoftirqd on cpu offline.

Signed-off-by: Zwane Mwaikambo <[EMAIL PROTECTED]>

Index: linux-2.6.11-rc3-mm2/kernel/softirq.c
===================================================================
RCS file: /home/cvsroot/linux-2.6.11-rc3-mm2/kernel/softirq.c,v
retrieving revision 1.1.1.1
diff -u -p -B -r1.1.1.1 softirq.c
--- linux-2.6.11-rc3-mm2/kernel/softirq.c       11 Feb 2005 05:14:57 -0000      
1.1.1.1
+++ linux-2.6.11-rc3-mm2/kernel/softirq.c       12 Feb 2005 18:24:54 -0000
@@ -355,8 +355,12 @@ static int ksoftirqd(void * __bind_cpu)
        set_current_state(TASK_INTERRUPTIBLE);
 
        while (!kthread_should_stop()) {
-               if (!local_softirq_pending())
+               preempt_disable();
+               if (!local_softirq_pending()) {
+                       preempt_enable_no_resched();
                        schedule();
+                       preempt_disable();
+               }
 
                __set_current_state(TASK_RUNNING);
 
@@ -364,14 +368,14 @@ static int ksoftirqd(void * __bind_cpu)
                        /* Preempt disable stops cpu going offline.
                           If already offline, we'll be on wrong CPU:
                           don't process */
-                       preempt_disable();
                        if (cpu_is_offline((long)__bind_cpu))
                                goto wait_to_die;
                        do_softirq();
-                       preempt_enable();
+                       preempt_enable_no_resched();
                        cond_resched();
+                       preempt_disable();
                }
-
+               preempt_enable();
                set_current_state(TASK_INTERRUPTIBLE);
        }
        __set_current_state(TASK_RUNNING);
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to