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, _______________________________________________ svn-src-head@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"