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>
This commit is contained in:
Родитель
c9a443cdf7
Коммит
c305d524e5
|
@ -738,7 +738,10 @@ static int run_ksoftirqd(void * __bind_cpu)
|
||||||
don't process */
|
don't process */
|
||||||
if (cpu_is_offline((long)__bind_cpu))
|
if (cpu_is_offline((long)__bind_cpu))
|
||||||
goto wait_to_die;
|
goto wait_to_die;
|
||||||
do_softirq();
|
local_irq_disable();
|
||||||
|
if (local_softirq_pending())
|
||||||
|
__do_softirq();
|
||||||
|
local_irq_enable();
|
||||||
preempt_enable_no_resched();
|
preempt_enable_no_resched();
|
||||||
cond_resched();
|
cond_resched();
|
||||||
preempt_disable();
|
preempt_disable();
|
||||||
|
|
Загрузка…
Ссылка в новой задаче