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