On state changes from RUN to anything else the AGGR sessions are

cleared/dropped leading to qid2tap[n] being NULL as there no longer
is a tap. Now, if there have been lots of frames queued the firmware
processes and returns those after the tap is gone.

Tested by:	osa
MFC after:	1 week
This commit is contained in:
Bernhard Schmidt 2012-01-27 17:39:02 +00:00
parent 10fa36f0bc
commit 0f7a9c77e3

View File

@ -2813,11 +2813,13 @@ iwn_ampdu_tx_done(struct iwn_softc *sc, int qid, int idx, int nframes,
bitmap |= 1ULL << bit;
}
tap = sc->qid2tap[qid];
tid = WME_AC_TO_TID(tap->txa_ac);
wn = (void *)tap->txa_ni;
wn->agg[tid].bitmap = bitmap;
wn->agg[tid].startidx = start;
wn->agg[tid].nframes = nframes;
if (tap != NULL) {
tid = WME_AC_TO_TID(tap->txa_ac);
wn = (void *)tap->txa_ni;
wn->agg[tid].bitmap = bitmap;
wn->agg[tid].startidx = start;
wn->agg[tid].nframes = nframes;
}
seqno = le32toh(*(status + nframes)) & 0xfff;
for (lastidx = (seqno & 0xff); ring->read != lastidx;) {