diff options
author | sam <sam@FreeBSD.org> | 2003-10-16 16:13:11 +0000 |
---|---|---|
committer | sam <sam@FreeBSD.org> | 2003-10-16 16:13:11 +0000 |
commit | 2044616f8e46ab43a26fa3e1fe1ed2d138530d2c (patch) | |
tree | 8c86a36abf8813e3abbe85647605c74b33fb60e9 /sys/dev/ath | |
parent | 4e2a8e2c7ec1ddfe5417316bb58ef98dc8dbf8ec (diff) | |
download | FreeBSD-src-2044616f8e46ab43a26fa3e1fe1ed2d138530d2c.zip FreeBSD-src-2044616f8e46ab43a26fa3e1fe1ed2d138530d2c.tar.gz |
o correct handling of a frame that has too many segments to fit in the
tx descriptor array
o while here fix a whitespace nit
Obtained from: NetBSD
Diffstat (limited to 'sys/dev/ath')
-rw-r--r-- | sys/dev/ath/if_ath.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/sys/dev/ath/if_ath.c b/sys/dev/ath/if_ath.c index ad419ea..6fc70a0 100644 --- a/sys/dev/ath/if_ath.c +++ b/sys/dev/ath/if_ath.c @@ -334,8 +334,8 @@ ath_detach(struct ath_softc *sc) ath_hal_detach(sc->sc_ah); ieee80211_ifdetach(ifp); - ATH_TXBUF_LOCK_DESTROY(sc); - ATH_TXQ_LOCK_DESTROY(sc); + ATH_TXBUF_LOCK_DESTROY(sc); + ATH_TXQ_LOCK_DESTROY(sc); return 0; } @@ -1765,7 +1765,10 @@ ath_tx_start(struct ath_softc *sc, struct ieee80211_node *ni, struct ath_buf *bf error = bus_dmamap_load_mbuf(sc->sc_dmat, bf->bf_dmamap, m0, ath_mbuf_load_cb, bf, BUS_DMA_NOWAIT); - if (error != 0) { + if (error == EFBIG) { + /* XXX packet requires too many descriptors */ + bf->bf_nseg = ATH_TXDESC+1; + } else if (error != 0) { sc->sc_stats.ast_tx_busdma++; m_freem(m0); return error; |