diff options
author | Anton Blanchard <anton@samba.org> | 2010-01-31 15:34:06 -0500 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2010-02-16 22:02:49 -0500 |
commit | 89713ed10815401a1bfe12e3a076b64048381b56 (patch) | |
tree | 2d9ce51782997e3ed265dbee7c72c3e7b0c776e3 /arch/powerpc/kernel/irq.c | |
parent | fc380c0c8a17bc2bd2d9d7fb41d4a88c3e618db2 (diff) |
powerpc: Add timer, performance monitor and machine check counts to /proc/interrupts
With NO_HZ it is useful to know how often the decrementer is going off. The
patch below adds an entry for it and also adds it into the /proc/stat
summaries.
While here, I added performance monitoring and machine check exceptions.
I found it useful to keep an eye on the PMU exception rate
when using the perf tool. Since it's possible to take a completely
handled machine check on a System p box it also sounds like a good idea to
keep a machine check summary.
The event naming matches x86 to keep gratuitous differences to a minimum.
Signed-off-by: Anton Blanchard <anton@samba.org>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc/kernel/irq.c')
-rw-r--r-- | arch/powerpc/kernel/irq.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c index b9cbb4570048..710505240f2f 100644 --- a/arch/powerpc/kernel/irq.c +++ b/arch/powerpc/kernel/irq.c | |||
@@ -196,6 +196,21 @@ static int show_other_interrupts(struct seq_file *p, int prec) | |||
196 | } | 196 | } |
197 | #endif /* CONFIG_PPC32 && CONFIG_TAU_INT */ | 197 | #endif /* CONFIG_PPC32 && CONFIG_TAU_INT */ |
198 | 198 | ||
199 | seq_printf(p, "%*s: ", prec, "LOC"); | ||
200 | for_each_online_cpu(j) | ||
201 | seq_printf(p, "%10u ", per_cpu(irq_stat, j).timer_irqs); | ||
202 | seq_printf(p, " Local timer interrupts\n"); | ||
203 | |||
204 | seq_printf(p, "%*s: ", prec, "CNT"); | ||
205 | for_each_online_cpu(j) | ||
206 | seq_printf(p, "%10u ", per_cpu(irq_stat, j).pmu_irqs); | ||
207 | seq_printf(p, " Performance monitoring interrupts\n"); | ||
208 | |||
209 | seq_printf(p, "%*s: ", prec, "MCE"); | ||
210 | for_each_online_cpu(j) | ||
211 | seq_printf(p, "%10u ", per_cpu(irq_stat, j).mce_exceptions); | ||
212 | seq_printf(p, " Machine check exceptions\n"); | ||
213 | |||
199 | seq_printf(p, "%*s: %10u\n", prec, "BAD", ppc_spurious_interrupts); | 214 | seq_printf(p, "%*s: %10u\n", prec, "BAD", ppc_spurious_interrupts); |
200 | 215 | ||
201 | return 0; | 216 | return 0; |
@@ -258,6 +273,26 @@ out: | |||
258 | return 0; | 273 | return 0; |
259 | } | 274 | } |
260 | 275 | ||
276 | /* | ||
277 | * /proc/stat helpers | ||
278 | */ | ||
279 | u64 arch_irq_stat_cpu(unsigned int cpu) | ||
280 | { | ||
281 | u64 sum = per_cpu(irq_stat, cpu).timer_irqs; | ||
282 | |||
283 | sum += per_cpu(irq_stat, cpu).pmu_irqs; | ||
284 | sum += per_cpu(irq_stat, cpu).mce_exceptions; | ||
285 | |||
286 | return sum; | ||
287 | } | ||
288 | |||
289 | u64 arch_irq_stat(void) | ||
290 | { | ||
291 | u64 sum = ppc_spurious_interrupts; | ||
292 | |||
293 | return sum; | ||
294 | } | ||
295 | |||
261 | #ifdef CONFIG_HOTPLUG_CPU | 296 | #ifdef CONFIG_HOTPLUG_CPU |
262 | void fixup_irqs(cpumask_t map) | 297 | void fixup_irqs(cpumask_t map) |
263 | { | 298 | { |