parisc: more irq statistics in /proc/interrupts
Helge Deller
maintainerPATCH 1/1 parisc: more irq statistics in /proc/interrupts
Add framework and initial values for more fine grained statistics in /proc/interrupts.
Signed-off-by Helge Deller <[email protected]>
arch/parisc/include/asm/hardirq.h +35 -1
@@ -1,11 +1,45 @@/* hardirq.h: PA-RISC hard IRQ support. * * Copyright (C) 2001 Matthew Wilcox <[email protected]> +* Copyright (C) 2013 Helge Deller <[email protected]> */ #ifndef _PARISC_HARDIRQ_H#define _PARISC_HARDIRQ_H -#include <asm-generic/hardirq.h> +#include <linux/cache.h> +#include <linux/threads.h> +#include <linux/irq.h> + +typedef struct { +unsigned int __softirq_pending; +#ifdef CONFIG_DEBUG_STACKOVERFLOW +unsigned int kernel_stack_usage; +#endif +#ifdef CONFIG_SMP +unsigned int irq_resched_count; +unsigned int irq_call_count; +/* +* irq_tlb_count is double-counted in irq_call_count, so it must be +* subtracted from irq_call_count when displaying irq_call_count +*/ +unsigned int irq_tlb_count; +#endif +}____cacheline_aligned irq_cpustat_t ; + +DECLARE_PER_CPU_SHARED_ALIGNED (irq_cpustat_t, irq_stat); + +#define __ARCH_IRQ_STAT +#define __IRQ_STAT (cpu, member) (irq_stat[cpu].member) +#define inc_irq_stat (member) this_cpu_inc(irq_stat.member) +#define local_softirq_pending () this_cpu_read(irq_stat.__softirq_pending) + +#define __ARCH_SET_SOFTIRQ_PENDING + +#define set_softirq_pending (x) \ + this_cpu_write(irq_stat.__softirq_pending, (x)) +#define or_softirq_pending (x) this_cpu_or(irq_stat.__softirq_pending, (x)) + +#define ack_bad_irq (irq) WARN(1, "unexpected IRQ trap at vector %02x\n", irq)#endif /* _PARISC_HARDIRQ_H */
arch/parisc/include/asm/processor.h +0 -1
@@ -97,7 +97,6 @@ struct cpuinfo_parisc {unsigned long txn_addr;/* MMIO addr of EIR or id_eid */ #ifdef CONFIG_SMP unsigned long pending_ipi;/* bitmap of type ipi_message_type */ -unsigned long ipi_count;/* number ipi Interrupts */ #endif unsigned long bh_count;/* number of times bh was invoked */ unsigned long prof_counter;/* per CPU profiling support */
arch/parisc/kernel/irq.c +48 -1
76 lines not on this page · raw message
arch/parisc/kernel/smp.c +2 -1
@@ -127,7 +127,7 @@ ipi_interrupt(int irq, void *dev_id)unsigned long flags;/* Count this now; we may make a call that never returns. */ - p->ipi_count++; +inc_irq_stat (irq_call_count);mb ();/* Order interrupt and bit testing. */
@@ -155,6 +155,7 @@ ipi_interrupt(int irq, void *dev_id)case IPI_RESCHEDULE :smp_debug (100 ,KERN_DEBUG "CPU%d IPI_RESCHEDULE\n" , this_cpu); +inc_irq_stat (irq_resched_count);scheduler_ipi ();break ;
arch/parisc/mm/init.c +2 -0
@@ -1077,6 +1077,7 @@ void flush_tlb_all(void) {int do_recycle; +inc_irq_stat (irq_tlb_count); do_recycle =0 ;spin_lock (&sid_lock);if (dirty_space_ids >RECYCLE_THRESHOLD ) {
@@ -1097,6 +1098,7 @@ void flush_tlb_all(void)#else void flush_tlb_all (void ) { +inc_irq_stat (irq_tlb_count);spin_lock (&sid_lock);flush_tlb_all_local (NULL );recycle_sids ();