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