diff options
Diffstat (limited to 'arch/ia64/kernel/irq_ia64.c')
-rw-r--r-- | arch/ia64/kernel/irq_ia64.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/arch/ia64/kernel/irq_ia64.c b/arch/ia64/kernel/irq_ia64.c index ab2d19c3661f..68339dd0c9e2 100644 --- a/arch/ia64/kernel/irq_ia64.c +++ b/arch/ia64/kernel/irq_ia64.c | |||
@@ -138,6 +138,7 @@ void destroy_irq(unsigned int irq) | |||
138 | void | 138 | void |
139 | ia64_handle_irq (ia64_vector vector, struct pt_regs *regs) | 139 | ia64_handle_irq (ia64_vector vector, struct pt_regs *regs) |
140 | { | 140 | { |
141 | struct pt_regs *old_regs = set_irq_regs(regs); | ||
141 | unsigned long saved_tpr; | 142 | unsigned long saved_tpr; |
142 | 143 | ||
143 | #if IRQ_DEBUG | 144 | #if IRQ_DEBUG |
@@ -183,7 +184,7 @@ ia64_handle_irq (ia64_vector vector, struct pt_regs *regs) | |||
183 | ia64_setreg(_IA64_REG_CR_TPR, vector); | 184 | ia64_setreg(_IA64_REG_CR_TPR, vector); |
184 | ia64_srlz_d(); | 185 | ia64_srlz_d(); |
185 | 186 | ||
186 | __do_IRQ(local_vector_to_irq(vector), regs); | 187 | __do_IRQ(local_vector_to_irq(vector)); |
187 | 188 | ||
188 | /* | 189 | /* |
189 | * Disable interrupts and send EOI: | 190 | * Disable interrupts and send EOI: |
@@ -200,6 +201,7 @@ ia64_handle_irq (ia64_vector vector, struct pt_regs *regs) | |||
200 | * come through until ia64_eoi() has been done. | 201 | * come through until ia64_eoi() has been done. |
201 | */ | 202 | */ |
202 | irq_exit(); | 203 | irq_exit(); |
204 | set_irq_regs(old_regs); | ||
203 | } | 205 | } |
204 | 206 | ||
205 | #ifdef CONFIG_HOTPLUG_CPU | 207 | #ifdef CONFIG_HOTPLUG_CPU |
@@ -224,6 +226,8 @@ void ia64_process_pending_intr(void) | |||
224 | */ | 226 | */ |
225 | while (vector != IA64_SPURIOUS_INT_VECTOR) { | 227 | while (vector != IA64_SPURIOUS_INT_VECTOR) { |
226 | if (!IS_RESCHEDULE(vector)) { | 228 | if (!IS_RESCHEDULE(vector)) { |
229 | struct pt_regs *old_regs = set_irq_regs(NULL); | ||
230 | |||
227 | ia64_setreg(_IA64_REG_CR_TPR, vector); | 231 | ia64_setreg(_IA64_REG_CR_TPR, vector); |
228 | ia64_srlz_d(); | 232 | ia64_srlz_d(); |
229 | 233 | ||
@@ -234,7 +238,8 @@ void ia64_process_pending_intr(void) | |||
234 | * Probably could shared code. | 238 | * Probably could shared code. |
235 | */ | 239 | */ |
236 | vectors_in_migration[local_vector_to_irq(vector)]=0; | 240 | vectors_in_migration[local_vector_to_irq(vector)]=0; |
237 | __do_IRQ(local_vector_to_irq(vector), NULL); | 241 | __do_IRQ(local_vector_to_irq(vector)); |
242 | set_irq_regs(old_regs); | ||
238 | 243 | ||
239 | /* | 244 | /* |
240 | * Disable interrupts and send EOI | 245 | * Disable interrupts and send EOI |
@@ -251,7 +256,7 @@ void ia64_process_pending_intr(void) | |||
251 | 256 | ||
252 | 257 | ||
253 | #ifdef CONFIG_SMP | 258 | #ifdef CONFIG_SMP |
254 | extern irqreturn_t handle_IPI (int irq, void *dev_id, struct pt_regs *regs); | 259 | extern irqreturn_t handle_IPI (int irq, void *dev_id); |
255 | 260 | ||
256 | static struct irqaction ipi_irqaction = { | 261 | static struct irqaction ipi_irqaction = { |
257 | .handler = handle_IPI, | 262 | .handler = handle_IPI, |