]> git.karo-electronics.de Git - mv-sheeva.git/commitdiff
sh: Count NMIs in irq_cpustat_t.
authorPaul Mundt <lethal@linux-sh.org>
Wed, 14 Oct 2009 07:42:28 +0000 (16:42 +0900)
committerPaul Mundt <lethal@linux-sh.org>
Wed, 14 Oct 2009 07:42:28 +0000 (16:42 +0900)
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>
arch/sh/include/asm/hardirq.h
arch/sh/kernel/irq.c
arch/sh/kernel/traps.c

index a5be4afa790bc1526b4144ad6100f7c8ac751723..48b191313a99256a17730f0813f051b46c062b61 100644 (file)
@@ -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 */
index 7cb933ba49579d7c97391119cb18d1e6cbfe08d5..11c289ecc0909cde27c39c7eff343158208ea7e6 100644 (file)
@@ -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;
 }
 
index a8396f36bd1485f0653ccdc31abdc98d323df01e..d52695df27020fc4ac15575356a45ec1d4618eaa 100644 (file)
@@ -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: