mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 20:51:03 +02:00
parisc: show number of FPE and unaligned access handler calls in /proc/interrupts
Show number of floating point assistant and unaligned access fixup handler in /proc/interrupts file. Signed-off-by: Helge Deller <deller@gmx.de>
This commit is contained in:
@@ -28,6 +28,8 @@ typedef struct {
|
|||||||
unsigned int irq_resched_count;
|
unsigned int irq_resched_count;
|
||||||
unsigned int irq_call_count;
|
unsigned int irq_call_count;
|
||||||
#endif
|
#endif
|
||||||
|
unsigned int irq_unaligned_count;
|
||||||
|
unsigned int irq_fpassist_count;
|
||||||
unsigned int irq_tlb_count;
|
unsigned int irq_tlb_count;
|
||||||
} ____cacheline_aligned irq_cpustat_t;
|
} ____cacheline_aligned irq_cpustat_t;
|
||||||
|
|
||||||
|
@@ -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_printf(p, "%10u ", irq_stats(j)->irq_call_count);
|
||||||
seq_puts(p, " Function call interrupts\n");
|
seq_puts(p, " Function call interrupts\n");
|
||||||
#endif
|
#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");
|
seq_printf(p, "%*s: ", prec, "TLB");
|
||||||
for_each_online_cpu(j)
|
for_each_online_cpu(j)
|
||||||
seq_printf(p, "%10u ", irq_stats(j)->irq_tlb_count);
|
seq_printf(p, "%10u ", irq_stats(j)->irq_tlb_count);
|
||||||
|
@@ -646,6 +646,7 @@ void notrace handle_interruption(int code, struct pt_regs *regs)
|
|||||||
case 14:
|
case 14:
|
||||||
/* Assist Exception Trap, i.e. floating point exception. */
|
/* Assist Exception Trap, i.e. floating point exception. */
|
||||||
die_if_kernel("Floating point exception", regs, 0); /* quiet */
|
die_if_kernel("Floating point exception", regs, 0); /* quiet */
|
||||||
|
__inc_irq_stat(irq_fpassist_count);
|
||||||
handle_fpe(regs);
|
handle_fpe(regs);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@@ -27,6 +27,7 @@
|
|||||||
#include <linux/signal.h>
|
#include <linux/signal.h>
|
||||||
#include <linux/ratelimit.h>
|
#include <linux/ratelimit.h>
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
|
#include <asm/hardirq.h>
|
||||||
|
|
||||||
/* #define DEBUG_UNALIGNED 1 */
|
/* #define DEBUG_UNALIGNED 1 */
|
||||||
|
|
||||||
@@ -454,6 +455,8 @@ void handle_unaligned(struct pt_regs *regs)
|
|||||||
struct siginfo si;
|
struct siginfo si;
|
||||||
register int flop=0; /* true if this is a flop */
|
register int flop=0; /* true if this is a flop */
|
||||||
|
|
||||||
|
__inc_irq_stat(irq_unaligned_count);
|
||||||
|
|
||||||
/* log a message with pacing */
|
/* log a message with pacing */
|
||||||
if (user_mode(regs)) {
|
if (user_mode(regs)) {
|
||||||
if (current->thread.flags & PARISC_UAC_SIGBUS) {
|
if (current->thread.flags & PARISC_UAC_SIGBUS) {
|
||||||
|
Reference in New Issue
Block a user