summaryrefslogtreecommitdiffstats
path: root/sys/dev
diff options
context:
space:
mode:
authoryongari <yongari@FreeBSD.org>2008-11-25 02:05:01 +0000
committeryongari <yongari@FreeBSD.org>2008-11-25 02:05:01 +0000
commit7a3aea1fdd59b66b0e85599604b24d0700e2ad69 (patch)
tree3a6622c752011f7104ebccd213dab8b80d17c180 /sys/dev
parent16105734c1cb06b26d7c241fd3dfb4b1c9f3d4c3 (diff)
downloadFreeBSD-src-7a3aea1fdd59b66b0e85599604b24d0700e2ad69.zip
FreeBSD-src-7a3aea1fdd59b66b0e85599604b24d0700e2ad69.tar.gz
Move unarming watchdog timer and pending multicast configuration
check to fxp_txeof(). While I'm here unarm watchdog timer only if there are no pending queued Tx requests. Previously the watchdog timer was unarmed whenever Tx interrupt is raised. This could be resulted in hiding root cause of watchdog timeouts.
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/fxp/if_fxp.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/sys/dev/fxp/if_fxp.c b/sys/dev/fxp/if_fxp.c
index 6f13e68..50d629b 100644
--- a/sys/dev/fxp/if_fxp.c
+++ b/sys/dev/fxp/if_fxp.c
@@ -1547,6 +1547,11 @@ fxp_txeof(struct fxp_softc *sc)
}
sc->fxp_desc.tx_first = txp;
bus_dmamap_sync(sc->cbl_tag, sc->cbl_map, BUS_DMASYNC_PREWRITE);
+ if (sc->tx_queued == 0) {
+ sc->watchdog_timer = 0;
+ if (sc->need_mcsetup)
+ fxp_mc_setup(sc);
+ }
}
static void
@@ -1587,11 +1592,6 @@ fxp_intr_body(struct fxp_softc *sc, struct ifnet *ifp, uint8_t statack,
if (statack & (FXP_SCB_STATACK_CXTNO | FXP_SCB_STATACK_CNA)) {
fxp_txeof(sc);
- sc->watchdog_timer = 0;
- if (sc->tx_queued == 0) {
- if (sc->need_mcsetup)
- fxp_mc_setup(sc);
- }
/*
* Try to start more packets transmitting.
*/
OpenPOWER on IntegriCloud