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.
This commit is contained in:
Pyun YongHyeon 2008-11-25 02:05:01 +00:00
parent 60bb79ebaa
commit 2593534403

View File

@ -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.
*/