Module Name: src
Committed By: matt
Date: Tue May 19 05:51:16 UTC 2015
Modified Files:
src/sys/arch/mips/cavium: octeon_intr.c
Log Message:
Add per irq evcnt's
To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/mips/cavium/octeon_intr.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/mips/cavium/octeon_intr.c
diff -u src/sys/arch/mips/cavium/octeon_intr.c:1.1 src/sys/arch/mips/cavium/octeon_intr.c:1.2
--- src/sys/arch/mips/cavium/octeon_intr.c:1.1 Wed Apr 29 08:32:00 2015
+++ src/sys/arch/mips/cavium/octeon_intr.c Tue May 19 05:51:16 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: octeon_intr.c,v 1.1 2015/04/29 08:32:00 hikaru Exp $ */
+/* $NetBSD: octeon_intr.c,v 1.2 2015/05/19 05:51:16 matt Exp $ */
/*
* Copyright 2001, 2002 Wasabi Systems, Inc.
* All rights reserved.
@@ -42,7 +42,7 @@
#define __INTR_PRIVATE
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: octeon_intr.c,v 1.1 2015/04/29 08:32:00 hikaru Exp $");
+__KERNEL_RCSID(0, "$NetBSD: octeon_intr.c,v 1.2 2015/05/19 05:51:16 matt Exp $");
#include <sys/param.h>
#include <sys/cpu.h>
@@ -78,7 +78,7 @@ static const struct ipl_sr_map octeon_ip
#define NIRQS 64
-const char *octeon_intrnames[NIRQS] = {
+const char * const octeon_intrnames[NIRQS] = {
"workq 0",
"workq 1",
"workq 2",
@@ -156,6 +156,7 @@ struct octeon_intrhand {
struct octeon_intrhead {
LIST_HEAD(, octeon_intrhand) intr_list;
+ struct evcnt intr_count;
int intr_refcnt;
};
@@ -169,7 +170,7 @@ struct octeon_cpuintr {
#define NINTRS 5 /* MIPS INT0 - INT4 */
struct octeon_cpuintr octeon_cpuintrs[NINTRS];
-const char *octeon_cpuintrnames[NINTRS] = {
+const char * const octeon_cpuintrnames[NINTRS] = {
"int 0 (IP2)",
"int 1 (IP3)",
"int 2 ",
@@ -286,6 +287,8 @@ octeon_intr_init(void)
for (size_t i = 0; i < NIRQS; i++) {
LIST_INIT(&octeon_ciu_intrtab[i].intr_list);
octeon_ciu_intrtab[i].intr_refcnt = 0;
+ evcnt_attach_dynamic(&octeon_ciu_intrtab[i].intr_count,
+ EVCNT_TYPE_INTR, NULL, "octeon", octeon_intrnames[i]);
}
}
@@ -414,7 +417,7 @@ octeon_iointr(int ipl, vaddr_t pc, uint3
int level, irq;
uint64_t hwpend = 0;
- asm (".set mips64; clz %0,%1; .set mips0" : "=r"(level) : "r"(ipending));
+ level = __builtin_clz(ipending);
switch (level = 21 - level) {
case 0: // MIPS_INT_MASK_0
hwpend = octeon_read_csr(CIU_INT0_SUM0) & int0_enable0;
@@ -429,6 +432,7 @@ octeon_iointr(int ipl, vaddr_t pc, uint3
}
if ((irq = ffs64(hwpend) - 1) < 0)
return;
+ octeon_ciu_intrtab[irq].intr_count.ev_count++;
LIST_FOREACH(ih, &octeon_ciu_intrtab[irq].intr_list, ih_q) {
(*ih->ih_func)(ih->ih_arg);
}