PERFORCE change 68856 for review
Sam Leffler
sam at FreeBSD.org
Wed Jan 12 14:00:10 PST 2005
http://perforce.freebsd.org/chv.cgi?CH=68856
Change 68856 by sam at sam_ebb on 2005/01/12 21:59:40
o hold a node reference in each beacon tx buf for consistency
o reclaim existing beacon resources explicitly before allocating
new ones (eliminates code duplication)
Affected files ...
.. //depot/projects/wifi/sys/dev/ath/if_ath.c#68 edit
Differences ...
==== //depot/projects/wifi/sys/dev/ath/if_ath.c#68 (text+ko) ====
@@ -2069,12 +2069,6 @@
sc->sc_stats.ast_be_nombuf++; /* XXX */
return ENOMEM; /* XXX */
}
- if (bf->bf_m != NULL) {
- bus_dmamap_unload(sc->sc_dmat, bf->bf_dmamap);
- m_freem(bf->bf_m);
- bf->bf_m = NULL;
- bf->bf_node = NULL;
- }
/*
* NB: the beacon data buffer must be 32-bit aligned;
* we assume the mbuf routines will return us something
@@ -2092,7 +2086,7 @@
BUS_DMA_NOWAIT);
if (error == 0) {
bf->bf_m = m;
- bf->bf_node = ni; /* NB: no held reference */
+ bf->bf_node = ieee80211_ref_node(ni);
} else {
m_freem(m);
}
@@ -2322,13 +2316,17 @@
{
struct ath_buf *bf;
- STAILQ_FOREACH(bf, &sc->sc_bbuf, bf_list)
+ STAILQ_FOREACH(bf, &sc->sc_bbuf, bf_list) {
if (bf->bf_m != NULL) {
bus_dmamap_unload(sc->sc_dmat, bf->bf_dmamap);
m_freem(bf->bf_m);
bf->bf_m = NULL;
+ }
+ if (bf->bf_node != NULL) {
+ ieee80211_free_node(bf->bf_node);
bf->bf_node = NULL;
}
+ }
}
/*
@@ -4355,6 +4353,7 @@
* be called with beacon transmission active.
*/
ath_hal_stoptxdma(ah, sc->sc_bhalq);
+ ath_beacon_free(sc);
error = ath_beacon_alloc(sc, ni);
if (error != 0)
goto bad;
More information about the p4-projects
mailing list