diff options
-rw-r--r-- | arch/ia64/kernel/irq_ia64.c | 25 |
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(); |