parisc: show number of FPE and unaligned access handler calls in /proc/interrupts
authorHelge Deller <deller@gmx.de>
Sat, 18 May 2013 19:35:44 +0000 (19:35 +0000)
committerHelge Deller <deller@gmx.de>
Fri, 24 May 2013 20:35:26 +0000 (22:35 +0200)
Show number of floating point assistant and unaligned access fixup
handler in /proc/interrupts file.

Signed-off-by: Helge Deller <deller@gmx.de>
arch/parisc/include/asm/hardirq.h
arch/parisc/kernel/irq.c
arch/parisc/kernel/traps.c
arch/parisc/kernel/unaligned.c

index c19f7138ba48b91dfffe1046da708782057cc779..4c6dd8da1e5daf2f44e90441e03826194d5aee8f 100644 (file)
@@ -28,6 +28,8 @@ typedef struct {
        unsigned int irq_resched_count;
        unsigned int irq_call_count;
 #endif
+       unsigned int irq_unaligned_count;
+       unsigned int irq_fpassist_count;
        unsigned int irq_tlb_count;
 } ____cacheline_aligned irq_cpustat_t;
 
index 55237a70e19773940f67e8e62ac7d43c60f36608..9c2d953f3de5b3f380fce7568fb85a4ea81b05e3 100644 (file)
@@ -188,6 +188,14 @@ int arch_show_interrupts(struct seq_file *p, int prec)
                seq_printf(p, "%10u ", irq_stats(j)->irq_call_count);
        seq_puts(p, "  Function call interrupts\n");
 #endif
+       seq_printf(p, "%*s: ", prec, "UAH");
+       for_each_online_cpu(j)
+               seq_printf(p, "%10u ", irq_stats(j)->irq_unaligned_count);
+       seq_puts(p, "  Unaligned access handler traps\n");
+       seq_printf(p, "%*s: ", prec, "FPA");
+       for_each_online_cpu(j)
+               seq_printf(p, "%10u ", irq_stats(j)->irq_fpassist_count);
+       seq_puts(p, "  Floating point assist traps\n");
        seq_printf(p, "%*s: ", prec, "TLB");
        for_each_online_cpu(j)
                seq_printf(p, "%10u ", irq_stats(j)->irq_tlb_count);
index fe41a98043bbcf287e3ee3562972d6b693e140d0..04e47c6a45626347aa261d3725005cdafb9385ad 100644 (file)
@@ -646,6 +646,7 @@ void notrace handle_interruption(int code, struct pt_regs *regs)
        case 14:
                /* Assist Exception Trap, i.e. floating point exception. */
                die_if_kernel("Floating point exception", regs, 0); /* quiet */
+               __inc_irq_stat(irq_fpassist_count);
                handle_fpe(regs);
                return;
 
index 234e3682cf0900ef0e55e18e168d1ad5324afd5f..d7c0acb35ec248c51329a5cb4594189bd5f5040f 100644 (file)
@@ -27,6 +27,7 @@
 #include <linux/signal.h>
 #include <linux/ratelimit.h>
 #include <asm/uaccess.h>
+#include <asm/hardirq.h>
 
 /* #define DEBUG_UNALIGNED 1 */
 
@@ -454,6 +455,8 @@ void handle_unaligned(struct pt_regs *regs)
        struct siginfo si;
        register int flop=0;    /* true if this is a flop */
 
+       __inc_irq_stat(irq_unaligned_count);
+
        /* log a message with pacing */
        if (user_mode(regs)) {
                if (current->thread.flags & PARISC_UAC_SIGBUS) {