summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2010-03-26 00:06:51 +0000
committerHuang Shijie <b32955@freescale.com>2010-09-09 17:18:22 +0800
commit06b7c5cb01b1e822570cc1792d4cad74d7b5539a (patch)
tree590f4c727b2bef20571c39568bec4a77b0d832b0
parentc68ef5cee2731d11ed32958aa77ae86c7120b603 (diff)
genirq: Run irq handlers with interrupts disabled
Running interrupt handlers with interrupts enabled can cause stack overflows. That has been observed with multiqueue NICs delivering all their interrupts to a single core. We might band aid that somehow by checking the interrupt stacks, but the real safe fix is to run the irq handlers with interrupts disabled. Drivers for whacky hardware still can reenable them in the handler itself, if the need arises. (They do already due to lockdep) The risk of doing this is rather low: - lockdep already enforces this - CONFIG_NOHZ has shaken out the drivers which relied on jiffies updates - time keeping is not longer sensitive to the timer interrupt being delayed Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Alan Cox <alan@lxorguk.ukuu.org.uk> Cc: Andi Kleen <andi@firstfloor.org> Cc: David Miller <davem@davemloft.net> Cc: Greg Kroah-Hartman <gregkh@suse.de> Cc: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Linus Torvalds <torvalds@osdl.org> LKML-Reference: <20100326000405.758579387@linutronix.de>
-rw-r--r--kernel/irq/handle.c3
1 files changed, 0 insertions, 3 deletions
diff --git a/kernel/irq/handle.c b/kernel/irq/handle.c
index 065205bdd920..fc9a8cca5551 100644
--- a/kernel/irq/handle.c
+++ b/kernel/irq/handle.c
@@ -368,9 +368,6 @@ irqreturn_t handle_IRQ_event(unsigned int irq, struct irqaction *action)
irqreturn_t ret, retval = IRQ_NONE;
unsigned int status = 0;
- if (!(action->flags & IRQF_DISABLED))
- local_irq_enable_in_hardirq();
-
do {
trace_irq_handler_entry(irq, action);
ret = action->handler(irq, action->dev_id);