svn commit: r312612 - head/sys/dev/ath

Adrian Chadd adrian at FreeBSD.org
Sun Jan 22 05:45:44 UTC 2017


Author: adrian
Date: Sun Jan 22 05:45:42 2017
New Revision: 312612
URL: https://svnweb.freebsd.org/changeset/base/312612

Log:
  [ath] only apply the AR9300 delimiter workaround for the first sub-frame.
  
  This is supposed to only be applied to the first subframe and only if
  RTS/CTS is being done.  I'm still not yet checking RTS/CTS exchange status
  so it's just happening for all subframes on AR9380 and later.
  
  This gets MCS23 throughput up from around 250mbit to 303mbit with RTS/CTS
  protection enabled, and around 330mbit with no HT protection enabled.
  
  Now, MCS23 has a PHY rate of 450mbit and we should be seeing closer to
  400mbit for a straight one-way UDP test, but this beats the previous
  maximum throughput.
  
  Tested:
  
  * AR9380 (STA) -> AR9580 (AP) - STA with the modifications, doing UDP TX
    test using iperf.

Modified:
  head/sys/dev/ath/if_ath_tx_ht.c

Modified: head/sys/dev/ath/if_ath_tx_ht.c
==============================================================================
--- head/sys/dev/ath/if_ath_tx_ht.c	Sun Jan 22 05:28:26 2017	(r312611)
+++ head/sys/dev/ath/if_ath_tx_ht.c	Sun Jan 22 05:45:42 2017	(r312612)
@@ -402,7 +402,7 @@ ath_tx_rate_fill_rcflags(struct ath_soft
  */
 static int
 ath_compute_num_delims(struct ath_softc *sc, struct ath_buf *first_bf,
-    uint16_t pktlen)
+    uint16_t pktlen, int is_first)
 {
 #define	MS(_v, _f)	(((_v) & _f) >> _f##_S)
 	const HAL_RATE_TABLE *rt = sc->sc_currates;
@@ -458,11 +458,12 @@ ath_compute_num_delims(struct ath_softc 
 	 * For AR9380, there's a minimum number of delimeters
 	 * required when doing RTS.
 	 *
-	 * XXX TODO: this is only needed if (a) RTS/CTS is enabled, and
-	 * XXX (b) this is the first sub-frame in the aggregate.
+	 * XXX TODO: this is only needed if (a) RTS/CTS is enabled for
+	 * this exchange, and (b) (done) this is the first sub-frame
+	 * in the aggregate.
 	 */
 	if (sc->sc_use_ent && (sc->sc_ent_cfg & AH_ENT_RTSCTS_DELIM_WAR)
-	    && ndelim < AH_FIRST_DESC_NDELIMS)
+	    && ndelim < AH_FIRST_DESC_NDELIMS && is_first)
 		ndelim = AH_FIRST_DESC_NDELIMS;
 
 	/*
@@ -975,7 +976,7 @@ ath_tx_form_aggr(struct ath_softc *sc, s
 		 */
 		bf->bf_state.bfs_ndelim =
 		    ath_compute_num_delims(sc, bf_first,
-		    bf->bf_state.bfs_pktlen);
+		    bf->bf_state.bfs_pktlen, (bf_first == bf));
 
 		/*
 		 * Calculate the padding needed from this set of delimiters,


More information about the svn-src-head mailing list