Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e360cd37 authored by Nicholas Piggin's avatar Nicholas Piggin Committed by Michael Ellerman
Browse files

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: default avatarNicholas Piggin <npiggin@gmail.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
parent 21bfd6a8
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -8,6 +8,7 @@
typedef struct {
typedef struct {
	unsigned int __softirq_pending;
	unsigned int __softirq_pending;
	unsigned int timer_irqs_event;
	unsigned int timer_irqs_event;
	unsigned int broadcast_irqs_event;
	unsigned int timer_irqs_others;
	unsigned int timer_irqs_others;
	unsigned int pmu_irqs;
	unsigned int pmu_irqs;
	unsigned int mce_exceptions;
	unsigned int mce_exceptions;
+6 −0
Original line number Original line Diff line number Diff line
@@ -508,6 +508,11 @@ int arch_show_interrupts(struct seq_file *p, int prec)
		seq_printf(p, "%10u ", per_cpu(irq_stat, j).timer_irqs_event);
		seq_printf(p, "%10u ", per_cpu(irq_stat, j).timer_irqs_event);
        seq_printf(p, "  Local timer interrupts for timer event device\n");
        seq_printf(p, "  Local timer interrupts for timer event device\n");


	seq_printf(p, "%*s: ", prec, "BCT");
	for_each_online_cpu(j)
		seq_printf(p, "%10u ", per_cpu(irq_stat, j).broadcast_irqs_event);
	seq_printf(p, "  Broadcast timer interrupts for timer event device\n");

	seq_printf(p, "%*s: ", prec, "LOC");
	seq_printf(p, "%*s: ", prec, "LOC");
	for_each_online_cpu(j)
	for_each_online_cpu(j)
		seq_printf(p, "%10u ", per_cpu(irq_stat, j).timer_irqs_others);
		seq_printf(p, "%10u ", per_cpu(irq_stat, j).timer_irqs_others);
@@ -567,6 +572,7 @@ u64 arch_irq_stat_cpu(unsigned int cpu)
{
{
	u64 sum = per_cpu(irq_stat, cpu).timer_irqs_event;
	u64 sum = per_cpu(irq_stat, cpu).timer_irqs_event;


	sum += per_cpu(irq_stat, cpu).broadcast_irqs_event;
	sum += per_cpu(irq_stat, cpu).pmu_irqs;
	sum += per_cpu(irq_stat, cpu).pmu_irqs;
	sum += per_cpu(irq_stat, cpu).mce_exceptions;
	sum += per_cpu(irq_stat, cpu).mce_exceptions;
	sum += per_cpu(irq_stat, cpu).spurious_irqs;
	sum += per_cpu(irq_stat, cpu).spurious_irqs;
+1 −4
Original line number Original line Diff line number Diff line
@@ -647,13 +647,10 @@ EXPORT_SYMBOL(timer_interrupt);
void timer_broadcast_interrupt(void)
void timer_broadcast_interrupt(void)
{
{
	u64 *next_tb = this_cpu_ptr(&decrementers_next_tb);
	u64 *next_tb = this_cpu_ptr(&decrementers_next_tb);
	struct pt_regs *regs = get_irq_regs();


	trace_timer_interrupt_entry(regs);
	*next_tb = ~(u64)0;
	*next_tb = ~(u64)0;
	tick_receive_broadcast();
	tick_receive_broadcast();
	__this_cpu_inc(irq_stat.timer_irqs_event);
	__this_cpu_inc(irq_stat.broadcast_irqs_event);
	trace_timer_interrupt_exit(regs);
}
}
#endif
#endif