aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/softirq.c
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2011-02-02 11:10:48 -0500
committerThomas Gleixner <tglx@linutronix.de>2011-02-08 13:37:12 -0500
commitc305d524e5dd3c3c7a6035083e30950bea1b52dc (patch)
tree2929186dfc8b0f1094375873231809768d1ac385 /kernel/softirq.c
parentc9a443cdf7726ce8b78c3177c6ae601ce37292fc (diff)
softirq: Avoid stack switch from ksoftirqd
ksoftirqd() calls do_softirq() which switches stacks on several architectures. That makes no sense at all. ksoftirqd's stack is sufficient. Call __do_softirq() directly. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Acked-by: Peter Zijlstra <peterz@infradead.org> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Heiko Carstens <heiko.carstens@de.ibm.com> Acked-by: David Miller <davem@davemloft.net> Cc: Paul Mundt <lethal@linux-sh.org> Reviewed-by: Frank Rowand <frank.rowand@am.sony.com> LKML-Reference: <alpine.LFD.2.00.1102021704530.31804@localhost6.localdomain6>
Diffstat (limited to 'kernel/softirq.c')
-rw-r--r--kernel/softirq.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/kernel/softirq.c b/kernel/softirq.c
index 68eb5efec388..c0490464e92f 100644
--- a/kernel/softirq.c
+++ b/kernel/softirq.c
@@ -738,7 +738,10 @@ static int run_ksoftirqd(void * __bind_cpu)
738 don't process */ 738 don't process */
739 if (cpu_is_offline((long)__bind_cpu)) 739 if (cpu_is_offline((long)__bind_cpu))
740 goto wait_to_die; 740 goto wait_to_die;
741 do_softirq(); 741 local_irq_disable();
742 if (local_softirq_pending())
743 __do_softirq();
744 local_irq_enable();
742 preempt_enable_no_resched(); 745 preempt_enable_no_resched();
743 cond_resched(); 746 cond_resched();
744 preempt_disable(); 747 preempt_disable();