diff options
author | jmg <jmg@FreeBSD.org> | 2004-10-18 23:06:12 +0000 |
---|---|---|
committer | jmg <jmg@FreeBSD.org> | 2004-10-18 23:06:12 +0000 |
commit | ab5364e4517590fc0e390fe6e8f7d4b7693feaf6 (patch) | |
tree | 2d82c8abd0886d8869387831ac453eee2a3b96ae /sys | |
parent | 4b81ce6dd2658abba782e835143f8008092c1c6f (diff) | |
download | FreeBSD-src-ab5364e4517590fc0e390fe6e8f7d4b7693feaf6.zip FreeBSD-src-ab5364e4517590fc0e390fe6e8f7d4b7693feaf6.tar.gz |
fix (for me) the problems where if_de gets really slow after time
(usually taking 20 seconds to transmit a packet).. no longer fall back
to only transmitting one packet (instead of the entire queue) after we
have processed the entire send queue... I have no idea why we didn't
start seeing this problem ~6 years ago when this code was introduced...
Diffstat (limited to 'sys')
-rw-r--r-- | sys/dev/de/if_de.c | 21 | ||||
-rw-r--r-- | sys/pci/if_de.c | 21 |
2 files changed, 0 insertions, 42 deletions
diff --git a/sys/dev/de/if_de.c b/sys/dev/de/if_de.c index 0e25f62..bbbe2a3 100644 --- a/sys/dev/de/if_de.c +++ b/sys/dev/de/if_de.c @@ -117,7 +117,6 @@ static void tulip_ifinit(void *); static int tulip_ifmedia_change(struct ifnet * const ifp); static void tulip_ifmedia_status(struct ifnet * const ifp, struct ifmediareq *req); -static void tulip_ifstart_one(struct ifnet *ifp); static void tulip_ifstart(struct ifnet *ifp); static void tulip_init(tulip_softc_t * const sc); static void tulip_intr_shared(void *arg); @@ -4635,30 +4634,10 @@ tulip_ifstart( break; } } - if (IFQ_DRV_IS_EMPTY(&sc->tulip_if.if_snd)) - sc->tulip_if.if_start = tulip_ifstart_one; } TULIP_PERFEND(ifstart); } - -static void -tulip_ifstart_one( - struct ifnet * const ifp) -{ - TULIP_PERFSTART(ifstart_one) - tulip_softc_t * const sc = (tulip_softc_t *)ifp->if_softc; - - if ((sc->tulip_if.if_flags & IFF_RUNNING) - && !IFQ_DRV_IS_EMPTY(&sc->tulip_if.if_snd)) { - struct mbuf *m; - IFQ_DRV_DEQUEUE(&sc->tulip_if.if_snd, m); - if(m == NULL); - else if((m = tulip_txput(sc, m)) != NULL) - IFQ_DRV_PREPEND(&sc->tulip_if.if_snd, m); - } - TULIP_PERFEND(ifstart_one); -} /* * Even though this routine runs at device spl, it does not break diff --git a/sys/pci/if_de.c b/sys/pci/if_de.c index 0e25f62..bbbe2a3 100644 --- a/sys/pci/if_de.c +++ b/sys/pci/if_de.c @@ -117,7 +117,6 @@ static void tulip_ifinit(void *); static int tulip_ifmedia_change(struct ifnet * const ifp); static void tulip_ifmedia_status(struct ifnet * const ifp, struct ifmediareq *req); -static void tulip_ifstart_one(struct ifnet *ifp); static void tulip_ifstart(struct ifnet *ifp); static void tulip_init(tulip_softc_t * const sc); static void tulip_intr_shared(void *arg); @@ -4635,30 +4634,10 @@ tulip_ifstart( break; } } - if (IFQ_DRV_IS_EMPTY(&sc->tulip_if.if_snd)) - sc->tulip_if.if_start = tulip_ifstart_one; } TULIP_PERFEND(ifstart); } - -static void -tulip_ifstart_one( - struct ifnet * const ifp) -{ - TULIP_PERFSTART(ifstart_one) - tulip_softc_t * const sc = (tulip_softc_t *)ifp->if_softc; - - if ((sc->tulip_if.if_flags & IFF_RUNNING) - && !IFQ_DRV_IS_EMPTY(&sc->tulip_if.if_snd)) { - struct mbuf *m; - IFQ_DRV_DEQUEUE(&sc->tulip_if.if_snd, m); - if(m == NULL); - else if((m = tulip_txput(sc, m)) != NULL) - IFQ_DRV_PREPEND(&sc->tulip_if.if_snd, m); - } - TULIP_PERFEND(ifstart_one); -} /* * Even though this routine runs at device spl, it does not break |