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(); |
