aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/irq_32.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kernel/irq_32.c')
-rw-r--r--arch/x86/kernel/irq_32.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/arch/x86/kernel/irq_32.c b/arch/x86/kernel/irq_32.c
index 0a57e39159a8..b51ffdcfa31a 100644
--- a/arch/x86/kernel/irq_32.c
+++ b/arch/x86/kernel/irq_32.c
@@ -223,21 +223,25 @@ unsigned int do_IRQ(struct pt_regs *regs)
223{ 223{
224 struct pt_regs *old_regs; 224 struct pt_regs *old_regs;
225 /* high bit used in ret_from_ code */ 225 /* high bit used in ret_from_ code */
226 int overflow, irq = ~regs->orig_ax; 226 int overflow;
227 unsigned vector = ~regs->orig_ax;
227 struct irq_desc *desc; 228 struct irq_desc *desc;
229 unsigned irq;
228 230
229 desc = irq_to_desc(irq);
230 if (unlikely(!desc)) {
231 printk(KERN_EMERG "%s: cannot handle IRQ %d\n",
232 __func__, irq);
233 BUG();
234 }
235 231
236 old_regs = set_irq_regs(regs); 232 old_regs = set_irq_regs(regs);
237 irq_enter(); 233 irq_enter();
234 irq = __get_cpu_var(vector_irq)[vector];
238 235
239 overflow = check_stack_overflow(); 236 overflow = check_stack_overflow();
240 237
238 desc = irq_to_desc(irq);
239 if (unlikely(!desc)) {
240 printk(KERN_EMERG "%s: cannot handle IRQ %d vector %#x\n",
241 __func__, irq, vector);
242 BUG();
243 }
244
241 if (!execute_on_irq_stack(overflow, desc, irq)) { 245 if (!execute_on_irq_stack(overflow, desc, irq)) {
242 if (unlikely(overflow)) 246 if (unlikely(overflow))
243 print_stack_overflow(); 247 print_stack_overflow();