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-head mailing list