Module Name:    src
Committed By:   matt
Date:           Thu Jul 12 17:20:20 UTC 2012

Modified Files:
        src/sys/arch/arm/arm: undefined.c

Log Message:
Add event counters for undefined instruction and cp15 instruction emulation.


To generate a diff of this commit:
cvs rdiff -u -r1.43 -r1.44 src/sys/arch/arm/arm/undefined.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/arm/arm/undefined.c
diff -u src/sys/arch/arm/arm/undefined.c:1.43 src/sys/arch/arm/arm/undefined.c:1.44
--- src/sys/arch/arm/arm/undefined.c:1.43	Wed Nov 16 16:59:47 2011
+++ src/sys/arch/arm/arm/undefined.c	Thu Jul 12 17:20:20 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: undefined.c,v 1.43 2011/11/16 16:59:47 he Exp $	*/
+/*	$NetBSD: undefined.c,v 1.44 2012/07/12 17:20:20 matt Exp $	*/
 
 /*
  * Copyright (c) 2001 Ben Harris.
@@ -54,7 +54,7 @@
 #include <sys/kgdb.h>
 #endif
 
-__KERNEL_RCSID(0, "$NetBSD: undefined.c,v 1.43 2011/11/16 16:59:47 he Exp $");
+__KERNEL_RCSID(0, "$NetBSD: undefined.c,v 1.44 2012/07/12 17:20:20 matt Exp $");
 
 #include <sys/malloc.h>
 #include <sys/queue.h>
@@ -122,6 +122,10 @@ remove_coproc_handler(void *cookie)
 	free(uh, M_TEMP);
 }
 
+static struct evcnt cp15_ev =
+    EVCNT_INITIALIZER(EVCNT_TYPE_TRAP, NULL, "cpu0", "undefined cp15 insn traps");
+EVCNT_ATTACH_STATIC(cp15_ev);
+
 static int
 cp15_trapper(u_int addr, u_int insn, struct trapframe *frame, int code)
 {
@@ -151,7 +155,7 @@ cp15_trapper(u_int addr, u_int insn, str
 	 */
 	if ((insn & 0xffff0fff) == 0xee1d0f70) {
 		*regp = (uintptr_t)l->l_private;
-		frame->tf_pc += INSN_SIZE;
+		cp15_ev.ev_count++;
 		return 0;
 	}
 
@@ -165,6 +169,7 @@ cp15_trapper(u_int addr, u_int insn, str
 		else
 			pcb->pcb_user_pid_rw = *regp;
 		frame->tf_pc += INSN_SIZE;
+		cp15_ev.ev_count++;
 		return 0;
 	}
 
@@ -235,6 +240,10 @@ undefined_init(void)
 #endif
 }
 
+static struct evcnt und_ev =
+    EVCNT_INITIALIZER(EVCNT_TYPE_TRAP, NULL, "cpu0", "undefined insn traps");
+EVCNT_ATTACH_STATIC(und_ev);
+
 void
 undefinedinstruction(trapframe_t *frame)
 {
@@ -249,6 +258,8 @@ undefinedinstruction(trapframe_t *frame)
 	int s;
 #endif
 
+	und_ev.ev_count++;
+
 	/* Enable interrupts if they were enabled before the exception. */
 #ifdef acorn26
 	if ((frame->tf_r15 & R15_IRQ_DISABLE) == 0)

Reply via email to