diff options
Diffstat (limited to 'arch/x86/kernel/irq_32.c')
-rw-r--r-- | arch/x86/kernel/irq_32.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/arch/x86/kernel/irq_32.c b/arch/x86/kernel/irq_32.c index d3fde94f7345..b49616bcc16b 100644 --- a/arch/x86/kernel/irq_32.c +++ b/arch/x86/kernel/irq_32.c | |||
@@ -70,7 +70,7 @@ fastcall unsigned int do_IRQ(struct pt_regs *regs) | |||
70 | { | 70 | { |
71 | struct pt_regs *old_regs; | 71 | struct pt_regs *old_regs; |
72 | /* high bit used in ret_from_ code */ | 72 | /* high bit used in ret_from_ code */ |
73 | int irq = ~regs->orig_eax; | 73 | int irq = ~regs->orig_ax; |
74 | struct irq_desc *desc = irq_desc + irq; | 74 | struct irq_desc *desc = irq_desc + irq; |
75 | #ifdef CONFIG_4KSTACKS | 75 | #ifdef CONFIG_4KSTACKS |
76 | union irq_ctx *curctx, *irqctx; | 76 | union irq_ctx *curctx, *irqctx; |
@@ -88,13 +88,13 @@ fastcall unsigned int do_IRQ(struct pt_regs *regs) | |||
88 | #ifdef CONFIG_DEBUG_STACKOVERFLOW | 88 | #ifdef CONFIG_DEBUG_STACKOVERFLOW |
89 | /* Debugging check for stack overflow: is there less than 1KB free? */ | 89 | /* Debugging check for stack overflow: is there less than 1KB free? */ |
90 | { | 90 | { |
91 | long esp; | 91 | long sp; |
92 | 92 | ||
93 | __asm__ __volatile__("andl %%esp,%0" : | 93 | __asm__ __volatile__("andl %%esp,%0" : |
94 | "=r" (esp) : "0" (THREAD_SIZE - 1)); | 94 | "=r" (sp) : "0" (THREAD_SIZE - 1)); |
95 | if (unlikely(esp < (sizeof(struct thread_info) + STACK_WARN))) { | 95 | if (unlikely(sp < (sizeof(struct thread_info) + STACK_WARN))) { |
96 | printk("do_IRQ: stack overflow: %ld\n", | 96 | printk("do_IRQ: stack overflow: %ld\n", |
97 | esp - sizeof(struct thread_info)); | 97 | sp - sizeof(struct thread_info)); |
98 | dump_stack(); | 98 | dump_stack(); |
99 | } | 99 | } |
100 | } | 100 | } |
@@ -112,7 +112,7 @@ fastcall unsigned int do_IRQ(struct pt_regs *regs) | |||
112 | * current stack (which is the irq stack already after all) | 112 | * current stack (which is the irq stack already after all) |
113 | */ | 113 | */ |
114 | if (curctx != irqctx) { | 114 | if (curctx != irqctx) { |
115 | int arg1, arg2, ebx; | 115 | int arg1, arg2, bx; |
116 | 116 | ||
117 | /* build the stack frame on the IRQ stack */ | 117 | /* build the stack frame on the IRQ stack */ |
118 | isp = (u32*) ((char*)irqctx + sizeof(*irqctx)); | 118 | isp = (u32*) ((char*)irqctx + sizeof(*irqctx)); |
@@ -128,10 +128,10 @@ fastcall unsigned int do_IRQ(struct pt_regs *regs) | |||
128 | (curctx->tinfo.preempt_count & SOFTIRQ_MASK); | 128 | (curctx->tinfo.preempt_count & SOFTIRQ_MASK); |
129 | 129 | ||
130 | asm volatile( | 130 | asm volatile( |
131 | " xchgl %%ebx,%%esp \n" | 131 | " xchgl %%ebx,%%esp \n" |
132 | " call *%%edi \n" | 132 | " call *%%edi \n" |
133 | " movl %%ebx,%%esp \n" | 133 | " movl %%ebx,%%esp \n" |
134 | : "=a" (arg1), "=d" (arg2), "=b" (ebx) | 134 | : "=a" (arg1), "=d" (arg2), "=b" (bx) |
135 | : "0" (irq), "1" (desc), "2" (isp), | 135 | : "0" (irq), "1" (desc), "2" (isp), |
136 | "D" (desc->handle_irq) | 136 | "D" (desc->handle_irq) |
137 | : "memory", "cc" | 137 | : "memory", "cc" |