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

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>

+23
+8
arch/arm/include/asm/hardirq.h
··· 22 22 #define __inc_irq_stat(cpu, member) __IRQ_STAT(cpu, member)++ 23 23 #define __get_irq_stat(cpu, member) __IRQ_STAT(cpu, member) 24 24 25 + #ifdef CONFIG_SMP 26 + u64 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 33 #if NR_IRQS > 512 26 34 #define HARDIRQ_BITS 10 27 35 #elif NR_IRQS > 256
+15
arch/arm/kernel/smp.c
··· 406 406 } 407 407 } 408 408 409 + u64 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 425 * Timer (local or broadcast) support 411 426 */