diff options
Diffstat (limited to 'arch/x86_64/kernel/irq.c')
-rw-r--r-- | arch/x86_64/kernel/irq.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/arch/x86_64/kernel/irq.c b/arch/x86_64/kernel/irq.c index 609f97153b88..4542fb031994 100644 --- a/arch/x86_64/kernel/irq.c +++ b/arch/x86_64/kernel/irq.c | |||
@@ -105,7 +105,12 @@ skip: | |||
105 | asmlinkage unsigned int do_IRQ(struct pt_regs *regs) | 105 | asmlinkage unsigned int do_IRQ(struct pt_regs *regs) |
106 | { | 106 | { |
107 | /* high bit used in ret_from_ code */ | 107 | /* high bit used in ret_from_ code */ |
108 | unsigned irq = ~regs->orig_rax; | 108 | unsigned vector = ~regs->orig_rax; |
109 | unsigned irq; | ||
110 | |||
111 | exit_idle(); | ||
112 | irq_enter(); | ||
113 | irq = vector_irq[vector]; | ||
109 | 114 | ||
110 | if (unlikely(irq >= NR_IRQS)) { | 115 | if (unlikely(irq >= NR_IRQS)) { |
111 | printk(KERN_EMERG "%s: cannot handle IRQ %d\n", | 116 | printk(KERN_EMERG "%s: cannot handle IRQ %d\n", |
@@ -113,8 +118,6 @@ asmlinkage unsigned int do_IRQ(struct pt_regs *regs) | |||
113 | BUG(); | 118 | BUG(); |
114 | } | 119 | } |
115 | 120 | ||
116 | exit_idle(); | ||
117 | irq_enter(); | ||
118 | #ifdef CONFIG_DEBUG_STACKOVERFLOW | 121 | #ifdef CONFIG_DEBUG_STACKOVERFLOW |
119 | stack_overflow_check(regs); | 122 | stack_overflow_check(regs); |
120 | #endif | 123 | #endif |