irq: arm: perform irqentry in entry code
[linux-2.6-microblaze.git] / arch / arm / kernel / irq.c
index 20ab1e6..b79975b 100644 (file)
@@ -63,11 +63,8 @@ int arch_show_interrupts(struct seq_file *p, int prec)
  */
 void handle_IRQ(unsigned int irq, struct pt_regs *regs)
 {
-       struct pt_regs *old_regs = set_irq_regs(regs);
        struct irq_desc *desc;
 
-       irq_enter();
-
        /*
         * Some hardware gives randomly wrong interrupts.  Rather
         * than crashing, do something sensible.
@@ -81,9 +78,6 @@ void handle_IRQ(unsigned int irq, struct pt_regs *regs)
                handle_irq_desc(desc);
        else
                ack_bad_irq(irq);
-
-       irq_exit();
-       set_irq_regs(old_regs);
 }
 
 /*
@@ -92,7 +86,15 @@ void handle_IRQ(unsigned int irq, struct pt_regs *regs)
 asmlinkage void __exception_irq_entry
 asm_do_IRQ(unsigned int irq, struct pt_regs *regs)
 {
+       struct pt_regs *old_regs;
+
+       irq_enter();
+       old_regs = set_irq_regs(regs);
+
        handle_IRQ(irq, regs);
+
+       set_irq_regs(old_regs);
+       irq_exit();
 }
 
 void __init init_IRQ(void)