svn commit: r257951 - head/sys/dev/iwn
Adrian Chadd
adrian at FreeBSD.org
Mon Nov 11 09:08:23 UTC 2013
Author: adrian
Date: Mon Nov 11 09:08:22 2013
New Revision: 257951
URL: http://svnweb.freebsd.org/changeset/base/257951
Log:
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.
Modified:
head/sys/dev/iwn/if_iwn.c
Modified: head/sys/dev/iwn/if_iwn.c
==============================================================================
--- head/sys/dev/iwn/if_iwn.c Mon Nov 11 08:56:40 2013 (r257950)
+++ head/sys/dev/iwn/if_iwn.c Mon Nov 11 09:08:22 2013 (r257951)
@@ -2987,12 +2987,24 @@ iwn_ampdu_tx_done(struct iwn_softc *sc,
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;
More information about the svn-src-all
mailing list