diff options
| author | Paul Mundt <lethal@linux-sh.org> | 2009-10-14 16:42:28 +0900 | 
|---|---|---|
| committer | Paul Mundt <lethal@linux-sh.org> | 2009-10-14 16:42:28 +0900 | 
| commit | 731ba3301de41d2ffae9dd3e0f85f7361d8ad8f4 (patch) | |
| tree | fa41931b1bfc7b24e569ab0659460241c4c54b18 | |
| parent | 56bfc42f6cba3e831094c01a23fbbb17a20bbdf8 (diff) | |
| download | olio-linux-3.10-731ba3301de41d2ffae9dd3e0f85f7361d8ad8f4.tar.xz olio-linux-3.10-731ba3301de41d2ffae9dd3e0f85f7361d8ad8f4.zip  | |
sh: Count NMIs in irq_cpustat_t.
This plugs in support for NMI counting per-CPU via irq_cpustat_t.
Modelled after the x86 implementation.
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
| -rw-r--r-- | arch/sh/include/asm/hardirq.h | 13 | ||||
| -rw-r--r-- | arch/sh/kernel/irq.c | 8 | ||||
| -rw-r--r-- | arch/sh/kernel/traps.c | 2 | 
3 files changed, 20 insertions, 3 deletions
diff --git a/arch/sh/include/asm/hardirq.h b/arch/sh/include/asm/hardirq.h index a5be4afa790..48b191313a9 100644 --- a/arch/sh/include/asm/hardirq.h +++ b/arch/sh/include/asm/hardirq.h @@ -1,9 +1,16 @@  #ifndef __ASM_SH_HARDIRQ_H  #define __ASM_SH_HARDIRQ_H -extern void ack_bad_irq(unsigned int irq); -#define ack_bad_irq ack_bad_irq +#include <linux/threads.h> +#include <linux/irq.h> + +typedef struct { +	unsigned int __softirq_pending; +	unsigned int __nmi_count;		/* arch dependent */ +} ____cacheline_aligned irq_cpustat_t; -#include <asm-generic/hardirq.h> +#include <linux/irq_cpustat.h>	/* Standard mappings for irq_cpustat_t above */ + +extern void ack_bad_irq(unsigned int irq);  #endif /* __ASM_SH_HARDIRQ_H */ diff --git a/arch/sh/kernel/irq.c b/arch/sh/kernel/irq.c index 7cb933ba495..11c289ecc09 100644 --- a/arch/sh/kernel/irq.c +++ b/arch/sh/kernel/irq.c @@ -36,7 +36,15 @@ void ack_bad_irq(unsigned int irq)   */  static int show_other_interrupts(struct seq_file *p, int prec)  { +	int j; + +	seq_printf(p, "%*s: ", prec, "NMI"); +	for_each_online_cpu(j) +		seq_printf(p, "%10u ", irq_stat[j].__nmi_count); +	seq_printf(p, "  Non-maskable interrupts\n"); +  	seq_printf(p, "%*s: %10u\n", prec, "ERR", atomic_read(&irq_err_count)); +  	return 0;  } diff --git a/arch/sh/kernel/traps.c b/arch/sh/kernel/traps.c index a8396f36bd1..d52695df270 100644 --- a/arch/sh/kernel/traps.c +++ b/arch/sh/kernel/traps.c @@ -95,9 +95,11 @@ BUILD_TRAP_HANDLER(bug)  BUILD_TRAP_HANDLER(nmi)  { +	unsigned int cpu = smp_processor_id();  	TRAP_HANDLER_DECL;  	nmi_enter(); +	nmi_count(cpu)++;  	switch (notify_die(DIE_NMI, "NMI", regs, 0, vec & 0xff, SIGINT)) {  	case NOTIFY_OK:  |