PERFORCE change 81337 for review
Sam Leffler
sam at FreeBSD.org
Tue Aug 2 15:59:53 GMT 2005
http://perforce.freebsd.org/chv.cgi?CH=81337
Change 81337 by sam at sam_ebb on 2005/08/02 15:59:36
clean ff buffers returned to sc_txbuf so they don't get
reclaimed again when the module is unloaded
Affected files ...
.. //depot/projects/wifi/sys/dev/ath/if_ath.c#96 edit
Differences ...
==== //depot/projects/wifi/sys/dev/ath/if_ath.c#96 (text+ko) ====
@@ -1139,13 +1139,15 @@
bad:
if (ni != NULL)
ieee80211_free_node(ni);
- if (bf->bf_m != NULL)
+ bf->bf_node = NULL;
+ if (bf->bf_m != NULL) {
m_freem(bf->bf_m);
- if (bf != NULL) {
- ATH_TXBUF_LOCK(sc);
- STAILQ_INSERT_TAIL(&sc->sc_txbuf, bf, bf_list);
- ATH_TXBUF_UNLOCK(sc);
- }
+ bf->bf_m = NULL;
+ }
+
+ ATH_TXBUF_LOCK(sc);
+ STAILQ_INSERT_TAIL(&sc->sc_txbuf, bf, bf_list);
+ ATH_TXBUF_UNLOCK(sc);
}
}
@@ -1272,11 +1274,13 @@
m->m_nextpkt = NULL;
bfstaged->bf_m->m_nextpkt = m;
m = bfstaged->bf_m;
+ bfstaged->bf_m = NULL;
m->m_flags |= M_FF;
/*
* Release the node reference held while
* the packet sat on an_ff_buf[]
*/
+ bfstaged->bf_node = NULL;
ieee80211_free_node(ni);
/*
@@ -1349,14 +1353,15 @@
*/
if (ni != NULL)
ieee80211_free_node(ni);
- if (bfstaged->bf_m != NULL)
+ bfstaged->bf_node = NULL;
+ if (bfstaged->bf_m != NULL) {
m_freem(bfstaged->bf_m);
- if (bfstaged != NULL) {
- ATH_TXBUF_LOCK(sc);
- STAILQ_INSERT_TAIL(&sc->sc_txbuf,
- bfstaged, bf_list);
- ATH_TXBUF_UNLOCK(sc);
+ bfstaged->bf_m = NULL;
}
+
+ ATH_TXBUF_LOCK(sc);
+ STAILQ_INSERT_TAIL(&sc->sc_txbuf, bfstaged, bf_list);
+ ATH_TXBUF_UNLOCK(sc);
} else {
#if 0
ifp->if_opackets++;
@@ -1392,6 +1397,7 @@
ATH_TXBUF_LOCK_ASSERT(sc);
STAILQ_FOREACH_SAFE(bf, frags, bf_list, next) {
+ /* NB: bf assumed clean */
STAILQ_REMOVE_HEAD(frags, bf_list);
STAILQ_INSERT_TAIL(&sc->sc_txbuf, bf, bf_list);
ieee80211_node_decref(ni);
@@ -1605,6 +1611,8 @@
bad:
ifp->if_oerrors++;
reclaim:
+ bf->bf_m = NULL;
+ bf->bf_node = NULL;
ATH_TXBUF_LOCK(sc);
STAILQ_INSERT_TAIL(&sc->sc_txbuf, bf, bf_list);
ath_txfrag_cleanup(sc, &frags, ni);
@@ -4380,6 +4388,7 @@
}
m_freem(bf->bf_m);
bf->bf_m = NULL;
+
ATH_TXBUF_LOCK(sc);
STAILQ_INSERT_TAIL(&sc->sc_txbuf, bf, bf_list);
ATH_TXBUF_UNLOCK(sc);
More information about the p4-projects
mailing list