Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d0c3be80 authored by Helge Deller's avatar Helge Deller
Browse files

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: default avatarHelge Deller <deller@gmx.de>
parent fbb46caa
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -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;


+8 −0
Original line number Original line Diff line number Diff line
@@ -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);
+1 −0
Original line number Original line Diff line number Diff line
@@ -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;


+3 −0
Original line number Original line Diff line number Diff line
@@ -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) {