Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

powerpc/time: account broadcast timer event interrupts separately

These are not local timer interrupts but IPIs. It's good to be able
to see how timer offloading is behaving, so split these out into
their own category.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>

authored by

Nicholas Piggin and committed by
Michael Ellerman
e360cd37 21bfd6a8

+8 -4
+1
arch/powerpc/include/asm/hardirq.h
··· 8 8 typedef struct { 9 9 unsigned int __softirq_pending; 10 10 unsigned int timer_irqs_event; 11 + unsigned int broadcast_irqs_event; 11 12 unsigned int timer_irqs_others; 12 13 unsigned int pmu_irqs; 13 14 unsigned int mce_exceptions;
+6
arch/powerpc/kernel/irq.c
··· 508 508 seq_printf(p, "%10u ", per_cpu(irq_stat, j).timer_irqs_event); 509 509 seq_printf(p, " Local timer interrupts for timer event device\n"); 510 510 511 + seq_printf(p, "%*s: ", prec, "BCT"); 512 + for_each_online_cpu(j) 513 + seq_printf(p, "%10u ", per_cpu(irq_stat, j).broadcast_irqs_event); 514 + seq_printf(p, " Broadcast timer interrupts for timer event device\n"); 515 + 511 516 seq_printf(p, "%*s: ", prec, "LOC"); 512 517 for_each_online_cpu(j) 513 518 seq_printf(p, "%10u ", per_cpu(irq_stat, j).timer_irqs_others); ··· 572 567 { 573 568 u64 sum = per_cpu(irq_stat, cpu).timer_irqs_event; 574 569 570 + sum += per_cpu(irq_stat, cpu).broadcast_irqs_event; 575 571 sum += per_cpu(irq_stat, cpu).pmu_irqs; 576 572 sum += per_cpu(irq_stat, cpu).mce_exceptions; 577 573 sum += per_cpu(irq_stat, cpu).spurious_irqs;
+1 -4
arch/powerpc/kernel/time.c
··· 647 647 void timer_broadcast_interrupt(void) 648 648 { 649 649 u64 *next_tb = this_cpu_ptr(&decrementers_next_tb); 650 - struct pt_regs *regs = get_irq_regs(); 651 650 652 - trace_timer_interrupt_entry(regs); 653 651 *next_tb = ~(u64)0; 654 652 tick_receive_broadcast(); 655 - __this_cpu_inc(irq_stat.timer_irqs_event); 656 - trace_timer_interrupt_exit(regs); 653 + __this_cpu_inc(irq_stat.broadcast_irqs_event); 657 654 } 658 655 #endif 659 656