svn commit: r194572 - head/sys/dev/fxp
Pyun YongHyeon
yongari at FreeBSD.org
Sun Jun 21 06:46:33 UTC 2009
Author: yongari
Date: Sun Jun 21 06:46:32 2009
New Revision: 194572
URL: http://svn.freebsd.org/changeset/base/194572
Log:
Always check fxp(4) is running, see if it can accept frames from
upper stack in fxp_start_body().
fxp(4) drops driver lock in Rx path so check the fxp(4) is still
running after reacquiring driver lock in Rx path. Also don't
invoke fxp_intr_body if fxp(4) is not running. With this change
there is no need to set suspend bit in device attach phase.
Modified:
head/sys/dev/fxp/if_fxp.c
Modified: head/sys/dev/fxp/if_fxp.c
==============================================================================
--- head/sys/dev/fxp/if_fxp.c Sun Jun 21 06:27:35 2009 (r194571)
+++ head/sys/dev/fxp/if_fxp.c Sun Jun 21 06:46:32 2009 (r194572)
@@ -992,7 +992,6 @@ fxp_detach(device_t dev)
#endif
FXP_LOCK(sc);
- sc->suspended = 1; /* Do same thing as we do for suspend */
/*
* Stop DMA and drop transmit queue, but disable interrupts first.
*/
@@ -1319,6 +1318,10 @@ fxp_start_body(struct ifnet *ifp)
if (sc->need_mcsetup)
return;
+ if ((ifp->if_drv_flags & (IFF_DRV_RUNNING | IFF_DRV_OACTIVE)) !=
+ IFF_DRV_RUNNING)
+ return;
+
if (sc->tx_queued > FXP_NTXCB_HIWAT)
fxp_txeof(sc);
/*
@@ -1727,7 +1730,8 @@ fxp_intr(void *xsc)
* First ACK all the interrupts in this pass.
*/
CSR_WRITE_1(sc, FXP_CSR_SCB_STATACK, statack);
- fxp_intr_body(sc, ifp, statack, -1);
+ if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0)
+ fxp_intr_body(sc, ifp, statack, -1);
}
FXP_UNLOCK(sc);
}
@@ -1987,6 +1991,8 @@ fxp_intr_body(struct fxp_softc *sc, stru
(*ifp->if_input)(ifp, m);
FXP_LOCK(sc);
rx_npkts++;
+ if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0)
+ return (rx_npkts);
} else {
/* Reuse RFA and loaded DMA map. */
ifp->if_iqdrops++;
@@ -2070,7 +2076,8 @@ fxp_tick(void *xsc)
*/
if (sc->rx_idle_secs > FXP_MAX_RX_IDLE) {
sc->rx_idle_secs = 0;
- fxp_mc_setup(sc);
+ if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0)
+ fxp_mc_setup(sc);
}
/*
* If there is no pending command, start another stats
More information about the svn-src-head
mailing list