diff options
Diffstat (limited to 'arch/ia64/kernel')
-rw-r--r-- | arch/ia64/kernel/irq_ia64.c | 31 |
1 files changed, 15 insertions, 16 deletions
diff --git a/arch/ia64/kernel/irq_ia64.c b/arch/ia64/kernel/irq_ia64.c index 927ad027820c..acc4d19ae62a 100644 --- a/arch/ia64/kernel/irq_ia64.c +++ b/arch/ia64/kernel/irq_ia64.c | |||
@@ -493,16 +493,15 @@ ia64_handle_irq (ia64_vector vector, struct pt_regs *regs) | |||
493 | saved_tpr = ia64_getreg(_IA64_REG_CR_TPR); | 493 | saved_tpr = ia64_getreg(_IA64_REG_CR_TPR); |
494 | ia64_srlz_d(); | 494 | ia64_srlz_d(); |
495 | while (vector != IA64_SPURIOUS_INT_VECTOR) { | 495 | while (vector != IA64_SPURIOUS_INT_VECTOR) { |
496 | struct irq_desc *desc = irq_to_desc(vector); | 496 | int irq = local_vector_to_irq(vector); |
497 | struct irq_desc *desc = irq_to_desc(irq); | ||
497 | 498 | ||
498 | if (unlikely(IS_LOCAL_TLB_FLUSH(vector))) { | 499 | if (unlikely(IS_LOCAL_TLB_FLUSH(vector))) { |
499 | smp_local_flush_tlb(); | 500 | smp_local_flush_tlb(); |
500 | kstat_incr_irqs_this_cpu(vector, desc); | 501 | kstat_incr_irqs_this_cpu(irq, desc); |
501 | } else if (unlikely(IS_RESCHEDULE(vector))) | 502 | } else if (unlikely(IS_RESCHEDULE(vector))) { |
502 | kstat_incr_irqs_this_cpu(vector, desc); | 503 | kstat_incr_irqs_this_cpu(irq, desc); |
503 | else { | 504 | } else { |
504 | int irq = local_vector_to_irq(vector); | ||
505 | |||
506 | ia64_setreg(_IA64_REG_CR_TPR, vector); | 505 | ia64_setreg(_IA64_REG_CR_TPR, vector); |
507 | ia64_srlz_d(); | 506 | ia64_srlz_d(); |
508 | 507 | ||
@@ -545,24 +544,24 @@ void ia64_process_pending_intr(void) | |||
545 | 544 | ||
546 | vector = ia64_get_ivr(); | 545 | vector = ia64_get_ivr(); |
547 | 546 | ||
548 | irq_enter(); | 547 | irq_enter(); |
549 | saved_tpr = ia64_getreg(_IA64_REG_CR_TPR); | 548 | saved_tpr = ia64_getreg(_IA64_REG_CR_TPR); |
550 | ia64_srlz_d(); | 549 | ia64_srlz_d(); |
551 | 550 | ||
552 | /* | 551 | /* |
553 | * Perform normal interrupt style processing | 552 | * Perform normal interrupt style processing |
554 | */ | 553 | */ |
555 | while (vector != IA64_SPURIOUS_INT_VECTOR) { | 554 | while (vector != IA64_SPURIOUS_INT_VECTOR) { |
556 | struct irq_desc *desc = irq_to_desc(vector); | 555 | int irq = local_vector_to_irq(vector); |
556 | struct irq_desc *desc = irq_to_desc(irq); | ||
557 | 557 | ||
558 | if (unlikely(IS_LOCAL_TLB_FLUSH(vector))) { | 558 | if (unlikely(IS_LOCAL_TLB_FLUSH(vector))) { |
559 | smp_local_flush_tlb(); | 559 | smp_local_flush_tlb(); |
560 | kstat_incr_irqs_this_cpu(vector, desc); | 560 | kstat_incr_irqs_this_cpu(irq, desc); |
561 | } else if (unlikely(IS_RESCHEDULE(vector))) | 561 | } else if (unlikely(IS_RESCHEDULE(vector))) { |
562 | kstat_incr_irqs_this_cpu(vector, desc); | 562 | kstat_incr_irqs_this_cpu(irq, desc); |
563 | else { | 563 | } else { |
564 | struct pt_regs *old_regs = set_irq_regs(NULL); | 564 | struct pt_regs *old_regs = set_irq_regs(NULL); |
565 | int irq = local_vector_to_irq(vector); | ||
566 | 565 | ||
567 | ia64_setreg(_IA64_REG_CR_TPR, vector); | 566 | ia64_setreg(_IA64_REG_CR_TPR, vector); |
568 | ia64_srlz_d(); | 567 | ia64_srlz_d(); |