svn commit: r185508 - head/sys/dev/cxgb
Kip Macy
kmacy at FreeBSD.org
Sun Nov 30 21:43:31 PST 2008
Author: kmacy
Date: Mon Dec 1 05:43:30 2008
New Revision: 185508
URL: http://svn.freebsd.org/changeset/base/185508
Log:
Update internal mac stats every time the tick task is called
if we don't do this "netstat -w 1" will frequently see negative
differences in packets sent
Modified:
head/sys/dev/cxgb/cxgb_main.c
Modified: head/sys/dev/cxgb/cxgb_main.c
==============================================================================
--- head/sys/dev/cxgb/cxgb_main.c Mon Dec 1 04:42:39 2008 (r185507)
+++ head/sys/dev/cxgb/cxgb_main.c Mon Dec 1 05:43:30 2008 (r185508)
@@ -2185,7 +2185,7 @@ cxgb_tick(void *arg)
if(sc->flags & CXGB_SHUTDOWN)
return;
- taskqueue_enqueue(sc->tq, &sc->tick_task);
+ taskqueue_enqueue(sc->tq, &sc->tick_task);
callout_reset(&sc->cxgb_tick_ch, CXGB_TICKS(sc), cxgb_tick, sc);
}
@@ -2204,10 +2204,25 @@ cxgb_tick_handler(void *arg, int count)
check_link_status(sc);
+ sc->check_task_cnt++;
+
+ /*
+ * adapter lock can currently only be acquired after the
+ * port lock
+ */
+ ADAPTER_UNLOCK(sc);
+
+ if (p->rev == T3_REV_B2 && p->nports < 4 && sc->open_device_map)
+ check_t3b2_mac(sc);
+
for (i = 0; i < sc->params.nports; i++) {
struct port_info *pi = &sc->port[i];
struct ifnet *ifp = pi->ifp;
struct mac_stats *mstats = &pi->mac.stats;
+ PORT_LOCK(pi);
+ t3_mac_update_stats(&pi->mac);
+ PORT_UNLOCK(pi);
+
ifp->if_opackets =
mstats->tx_frames_64 +
@@ -2254,30 +2269,6 @@ cxgb_tick_handler(void *arg, int count)
mstats->rx_short +
mstats->rx_fcs_errs;
}
-
- sc->check_task_cnt++;
-
- /*
- * adapter lock can currently only be acquired after the
- * port lock
- */
- ADAPTER_UNLOCK(sc);
-
- if (p->rev == T3_REV_B2 && p->nports < 4 && sc->open_device_map)
- check_t3b2_mac(sc);
-
- /* Update MAC stats if it's time to do so */
- if (!p->linkpoll_period ||
- (sc->check_task_cnt * p->linkpoll_period) / 10 >=
- p->stats_update_period) {
- for_each_port(sc, i) {
- struct port_info *port = &sc->port[i];
- PORT_LOCK(port);
- t3_mac_update_stats(&port->mac);
- PORT_UNLOCK(port);
- }
- sc->check_task_cnt = 0;
- }
}
static void
More information about the svn-src-all
mailing list