Module Name:    src
Committed By:   msaitoh
Date:           Fri Nov  9 09:04:20 UTC 2012

Modified Files:
        src/sys/dev/marvell: if_mvgbe.c

Log Message:
Add MVGBE_EVENT_COUNTERS for debugging. Count rxoverrrun and wdogsoft.


To generate a diff of this commit:
cvs rdiff -u -r1.31 -r1.32 src/sys/dev/marvell/if_mvgbe.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/dev/marvell/if_mvgbe.c
diff -u src/sys/dev/marvell/if_mvgbe.c:1.31 src/sys/dev/marvell/if_mvgbe.c:1.32
--- src/sys/dev/marvell/if_mvgbe.c:1.31	Thu Nov  8 15:39:29 2012
+++ src/sys/dev/marvell/if_mvgbe.c	Fri Nov  9 09:04:19 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_mvgbe.c,v 1.31 2012/11/08 15:39:29 msaitoh Exp $	*/
+/*	$NetBSD: if_mvgbe.c,v 1.32 2012/11/09 09:04:19 msaitoh Exp $	*/
 /*
  * Copyright (c) 2007, 2008 KIYOHARA Takashi
  * All rights reserved.
@@ -25,7 +25,7 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_mvgbe.c,v 1.31 2012/11/08 15:39:29 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_mvgbe.c,v 1.32 2012/11/09 09:04:19 msaitoh Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -33,6 +33,7 @@ __KERNEL_RCSID(0, "$NetBSD: if_mvgbe.c,v
 #include <sys/device.h>
 #include <sys/endian.h>
 #include <sys/errno.h>
+#include <sys/evcnt.h>
 #include <sys/kernel.h>
 #include <sys/kmem.h>
 #include <sys/mutex.h>
@@ -145,6 +146,14 @@ do {									\
 #define MVGBE_IPGINTTX_DEFAULT	768
 #define MVGBE_IPGINTRX_DEFAULT	768
 
+#ifdef MVGBE_EVENT_COUNTERS
+#define	MVGBE_EVCNT_INCR(ev)		(ev)->ev_count++
+#define	MVGBE_EVCNT_ADD(ev, val)	(ev)->ev_count += (val)
+#else
+#define	MVGBE_EVCNT_INCR(ev)		/* nothing */
+#define	MVGBE_EVCNT_ADD(ev, val)	/* nothing */
+#endif
+
 struct mvgbe_jpool_entry {
 	int slot;
 	LIST_ENTRY(mvgbe_jpool_entry) jpool_entries;
@@ -225,6 +234,10 @@ struct mvgbe_softc {
 
 	krndsource_t sc_rnd_source;
 	struct sysctllog *mvgbe_clog;
+#ifdef MVGBE_EVENT_COUNTERS
+	struct evcnt sc_ev_rxoverrun;
+	struct evcnt sc_ev_wdogsoft;
+#endif
 };
 
 
@@ -807,6 +820,13 @@ mvgbe_attach(device_t parent, device_t s
 	ether_set_ifflags_cb(&sc->sc_ethercom, mvgbe_ifflags_cb);
 
 	sysctl_mvgbe_init(sc);
+#ifdef MVGBE_EVENT_COUNTERS
+	/* Attach event counters. */
+	evcnt_attach_dynamic(&sc->sc_ev_rxoverrun, EVCNT_TYPE_MISC,
+	    NULL, device_xname(sc->sc_dev), "rxoverrrun");
+	evcnt_attach_dynamic(&sc->sc_ev_wdogsoft, EVCNT_TYPE_MISC,
+	    NULL, device_xname(sc->sc_dev), "wdogsoft");
+#endif
 	rnd_attach_source(&sc->sc_rnd_source, device_xname(sc->sc_dev),
 	    RND_TYPE_NET, 0);
 
@@ -883,6 +903,7 @@ mvgbe_tick(void *arg)
 	s = splnet();
 	mii_tick(mii);
 	/* Need more work */
+	MVGBE_EVCNT_ADD(&sc->sc_ev_rxoverrun, MVGBE_READ(sc, MVGBE_POFC));
 	splx(s);
 
 	callout_schedule(&sc->sc_tick_ch, hz);
@@ -1286,6 +1307,7 @@ mvgbe_watchdog(struct ifnet *ifp)
 			MVGBE_WRITE(sc, MVGBE_TQC, MVGBE_TQC_ENQ);
 			ifp->if_timer = 5;
 			sc->sc_wdogsoft = 0;
+			MVGBE_EVCNT_INCR(&sc->sc_ev_wdogsoft);
 		} else {
 			aprint_error_ifnet(ifp, "watchdog timeout\n");
 

Reply via email to