If A-MPDU transmission fails entirely, then no BA is received from the
NIC and pushed up to the driver. Unfortunately this means there's no rate control notification done. Thus, if the rate control code makes a decision that hits a crappy rate that can't succeed, the rate code would never lower the rate and packet loss would continue. So, fake some rate control notification in this case.
This commit is contained in:
parent
559abc28c0
commit
825e355d1d
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=257951
@ -2987,12 +2987,24 @@ iwn_ampdu_tx_done(struct iwn_softc *sc, int qid, int idx, int nframes,
|
|||||||
|
|
||||||
DPRINTF(sc, IWN_DEBUG_TRACE, "->%s begin\n", __func__);
|
DPRINTF(sc, IWN_DEBUG_TRACE, "->%s begin\n", __func__);
|
||||||
|
|
||||||
#ifdef NOT_YET
|
|
||||||
if (nframes == 1) {
|
if (nframes == 1) {
|
||||||
if ((*status & 0xff) != 1 && (*status & 0xff) != 2)
|
if ((*status & 0xff) != 1 && (*status & 0xff) != 2) {
|
||||||
|
#ifdef NOT_YET
|
||||||
printf("ieee80211_send_bar()\n");
|
printf("ieee80211_send_bar()\n");
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
/*
|
||||||
|
* If we completely fail a transmit, make sure a
|
||||||
|
* notification is pushed up to the rate control
|
||||||
|
* layer.
|
||||||
|
*/
|
||||||
|
tap = sc->qid2tap[qid];
|
||||||
|
tid = tap->txa_tid;
|
||||||
|
wn = (void *)tap->txa_ni;
|
||||||
|
ni = tap->txa_ni;
|
||||||
|
ieee80211_ratectl_tx_complete(ni->ni_vap, ni,
|
||||||
|
IEEE80211_RATECTL_TX_FAILURE, &nframes, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bitmap = 0;
|
bitmap = 0;
|
||||||
start = idx;
|
start = idx;
|
||||||
|
Loading…
Reference in New Issue
Block a user