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:
Adrian Chadd 2013-11-11 09:08:22 +00:00
parent 559abc28c0
commit 825e355d1d
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=257951

View File

@ -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__);
#ifdef NOT_YET
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");
}
#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;
start = idx;