Commit f93d4594 authored by Russell King's avatar Russell King

Since irq_exit() now deals with softirqs, irq_enter and irq_exit

must be located at the top level of the interrupt handler.
parent 01561776
...@@ -217,14 +217,11 @@ do_simple_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs) ...@@ -217,14 +217,11 @@ do_simple_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs)
desc->triggered = 1; desc->triggered = 1;
irq_enter();
kstat.irqs[cpu][irq]++; kstat.irqs[cpu][irq]++;
action = desc->action; action = desc->action;
if (action) if (action)
__do_irq(irq, desc->action, regs); __do_irq(irq, desc->action, regs);
irq_exit();
} }
/* /*
...@@ -256,7 +253,6 @@ do_edge_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs) ...@@ -256,7 +253,6 @@ do_edge_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs)
*/ */
desc->running = 1; desc->running = 1;
irq_enter();
kstat.irqs[cpu][irq]++; kstat.irqs[cpu][irq]++;
do { do {
...@@ -274,8 +270,6 @@ do_edge_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs) ...@@ -274,8 +270,6 @@ do_edge_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs)
__do_irq(irq, action, regs); __do_irq(irq, action, regs);
} while (desc->pending); } while (desc->pending);
irq_exit();
desc->running = 0; desc->running = 0;
/* /*
...@@ -311,7 +305,6 @@ do_level_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs) ...@@ -311,7 +305,6 @@ do_level_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs)
desc->chip->ack(irq); desc->chip->ack(irq);
if (likely(desc->enabled)) { if (likely(desc->enabled)) {
irq_enter();
kstat.irqs[cpu][irq]++; kstat.irqs[cpu][irq]++;
/* /*
...@@ -325,7 +318,6 @@ do_level_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs) ...@@ -325,7 +318,6 @@ do_level_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs)
!check_irq_lock(desc, irq, regs))) !check_irq_lock(desc, irq, regs)))
desc->chip->unmask(irq); desc->chip->unmask(irq);
} }
irq_exit();
} }
} }
...@@ -345,12 +337,11 @@ asmlinkage void asm_do_IRQ(int irq, struct pt_regs *regs) ...@@ -345,12 +337,11 @@ asmlinkage void asm_do_IRQ(int irq, struct pt_regs *regs)
if (irq >= NR_IRQS) if (irq >= NR_IRQS)
desc = &bad_irq_desc; desc = &bad_irq_desc;
irq_enter();
spin_lock(&irq_controller_lock); spin_lock(&irq_controller_lock);
desc->handle(irq, desc, regs); desc->handle(irq, desc, regs);
spin_unlock(&irq_controller_lock); spin_unlock(&irq_controller_lock);
irq_exit();
if (softirq_pending(smp_processor_id()))
do_softirq();
} }
void __set_irq_handler(unsigned int irq, irq_handler_t handle, int is_chained) void __set_irq_handler(unsigned int irq, irq_handler_t handle, int is_chained)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment