aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorRussell King <rmk+kernel@arm.linux.org.uk>2010-11-15 09:46:46 -0500
committerRussell King <rmk+kernel@arm.linux.org.uk>2010-12-20 10:08:01 -0500
commitb54992fe1b4bad7b7488d58b8696e4e8974fdab0 (patch)
tree42c87b7a7f04627c841467ca65cf4e90f87ce2e2 /arch
parent4a88abd7b48e8ec8084b1252d0f5ebdab43c2508 (diff)
ARM: SMP: collect IPI and local timer IRQs for /proc/stat
The IPI and local timer interrupts weren't being properly accounted for in /proc/stat. Collect them from the irq_stat structure, and return their sum. Reviewed-by: Catalin Marinas <catalin.marinas@arm.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/include/asm/hardirq.h8
-rw-r--r--arch/arm/kernel/smp.c15
2 files changed, 23 insertions, 0 deletions
diff --git a/arch/arm/include/asm/hardirq.h b/arch/arm/include/asm/hardirq.h
index c52e2507c9e0..89ad1805e579 100644
--- a/arch/arm/include/asm/hardirq.h
+++ b/arch/arm/include/asm/hardirq.h
@@ -22,6 +22,14 @@ typedef struct {
22#define __inc_irq_stat(cpu, member) __IRQ_STAT(cpu, member)++ 22#define __inc_irq_stat(cpu, member) __IRQ_STAT(cpu, member)++
23#define __get_irq_stat(cpu, member) __IRQ_STAT(cpu, member) 23#define __get_irq_stat(cpu, member) __IRQ_STAT(cpu, member)
24 24
25#ifdef CONFIG_SMP
26u64 smp_irq_stat_cpu(unsigned int cpu);
27#else
28#define smp_irq_stat_cpu(cpu) 0
29#endif
30
31#define arch_irq_stat_cpu smp_irq_stat_cpu
32
25#if NR_IRQS > 512 33#if NR_IRQS > 512
26#define HARDIRQ_BITS 10 34#define HARDIRQ_BITS 10
27#elif NR_IRQS > 256 35#elif NR_IRQS > 256
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
index fa0c5f6e1587..1de3e13a42a1 100644
--- a/arch/arm/kernel/smp.c
+++ b/arch/arm/kernel/smp.c
@@ -406,6 +406,21 @@ void show_ipi_list(struct seq_file *p, int prec)
406 } 406 }
407} 407}
408 408
409u64 smp_irq_stat_cpu(unsigned int cpu)
410{
411 u64 sum = 0;
412 int i;
413
414 for (i = 0; i < NR_IPI; i++)
415 sum += __get_irq_stat(cpu, ipi_irqs[i]);
416
417#ifdef CONFIG_LOCAL_TIMERS
418 sum += __get_irq_stat(cpu, local_timer_irqs);
419#endif
420
421 return sum;
422}
423
409/* 424/*
410 * Timer (local or broadcast) support 425 * Timer (local or broadcast) support
411 */ 426 */