diff options
author | Linus Torvalds <torvalds@g5.osdl.org> | 2006-10-06 13:11:15 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-10-06 13:11:15 -0700 |
commit | e630015504cdd4d166c371fec39b8ca258fcbc0e (patch) | |
tree | dc9eccdf841b86099f4fa6e14711058f3ddcf573 | |
parent | e317c8ccaaf900abf39cc3240e4dc5ba82a3cc67 (diff) | |
download | op-kernel-dev-e630015504cdd4d166c371fec39b8ca258fcbc0e.zip op-kernel-dev-e630015504cdd4d166c371fec39b8ca258fcbc0e.tar.gz |
ARM: fix up nested irq regs usage
This should fix up the per-cpu irq register pointer if we have nested
hardware interrupts.
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r-- | arch/arm/kernel/irq.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/arch/arm/kernel/irq.c b/arch/arm/kernel/irq.c index e999b11..2c4ff1c 100644 --- a/arch/arm/kernel/irq.c +++ b/arch/arm/kernel/irq.c @@ -111,6 +111,7 @@ static struct irq_desc bad_irq_desc = { */ asmlinkage void asm_do_IRQ(unsigned int irq, struct pt_regs *regs) { + struct pt_regs *old_regs = set_irq_regs(regs); struct irqdesc *desc = irq_desc + irq; /* @@ -122,13 +123,13 @@ asmlinkage void asm_do_IRQ(unsigned int irq, struct pt_regs *regs) irq_enter(); - set_irq_regs(regs); desc_handle_irq(irq, desc); /* AT91 specific workaround */ irq_finish(irq); irq_exit(); + set_irq_regs(old_regs); } void set_irq_flags(unsigned int irq, unsigned int iflags) |