aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/fxp/if_fxp.c
diff options
context:
space:
mode:
authorPyun YongHyeon <yongari@FreeBSD.org>2008-11-25 02:05:01 +0000
committerPyun YongHyeon <yongari@FreeBSD.org>2008-11-25 02:05:01 +0000
commit2593534403e11632de8cba98452fbc429d7ed795 (patch)
tree3a6622c752011f7104ebccd213dab8b80d17c180 /sys/dev/fxp/if_fxp.c
parent60bb79ebaa4292b09c44e9b3cc25d838a32c404e (diff)
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.
Notes
Notes: svn path=/head/; revision=185276
Diffstat (limited to 'sys/dev/fxp/if_fxp.c')
-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 6f13e681dae9..50d629b8c070 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.
*/