Date: Sun, 10 Apr 2016 03:35:18 +0000 (UTC) From: Adrian Chadd <adrian@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r297774 - head/sys/net80211 Message-ID: <201604100335.u3A3ZIKs029790@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: adrian Date: Sun Apr 10 03:35:17 2016 New Revision: 297774 URL: https://svnweb.freebsd.org/changeset/base/297774 Log: [net80211] unconditionally do A-MPDU RX aging. It's 2016 and vendors (including us!) still have 802.11n TX/RX sequence handling bugs. It's suboptimal, but I'd rather see us default to handling things in a sensible way. So, just delete the #ifdef'ed code for now. I'll leave the option in so it doesn't break existing configurations. This all started because I've started getting reports about urtwn not working after I enabled 802.11n support, and it's because the ARM kernel configs don't include A-MPDU RX aging. Modified: head/sys/net80211/ieee80211_ht.c Modified: head/sys/net80211/ieee80211_ht.c ============================================================================== --- head/sys/net80211/ieee80211_ht.c Sun Apr 10 01:25:48 2016 (r297773) +++ head/sys/net80211/ieee80211_ht.c Sun Apr 10 03:35:17 2016 (r297774) @@ -136,12 +136,10 @@ const struct ieee80211_mcs_rates ieee802 { 429, 477, 891, 990 }, /* MCS 76 */ }; -#ifdef IEEE80211_AMPDU_AGE static int ieee80211_ampdu_age = -1; /* threshold for ampdu reorder q (ms) */ SYSCTL_PROC(_net_wlan, OID_AUTO, ampdu_age, CTLTYPE_INT | CTLFLAG_RW, &ieee80211_ampdu_age, 0, ieee80211_sysctl_msecs_ticks, "I", "AMPDU max reorder age (ms)"); -#endif static int ieee80211_recv_bar_ena = 1; SYSCTL_INT(_net_wlan, OID_AUTO, recv_bar, CTLFLAG_RW, &ieee80211_recv_bar_ena, @@ -178,9 +176,7 @@ ieee80211_ht_init(void) /* * Setup HT parameters that depends on the clock frequency. */ -#ifdef IEEE80211_AMPDU_AGE ieee80211_ampdu_age = msecs_to_ticks(500); -#endif ieee80211_addba_timeout = msecs_to_ticks(250); ieee80211_addba_backoff = msecs_to_ticks(10*1000); ieee80211_bar_timeout = msecs_to_ticks(250); @@ -671,7 +667,6 @@ ampdu_rx_dispatch(struct ieee80211_rx_am vap->iv_stats.is_ampdu_rx_oor += i; } -#ifdef IEEE80211_AMPDU_AGE /* * Dispatch all frames in the A-MPDU re-order queue. */ @@ -696,7 +691,6 @@ ampdu_rx_flush(struct ieee80211_node *ni break; } } -#endif /* IEEE80211_AMPDU_AGE */ /* * Dispatch all frames in the A-MPDU re-order queue @@ -864,7 +858,7 @@ again: * Common case (hopefully): in the BA window. * Sec 9.10.7.6.2 a) (p.137) */ -#ifdef IEEE80211_AMPDU_AGE + /* * Check for frames sitting too long in the reorder queue. * This should only ever happen if frames are not delivered @@ -903,7 +897,7 @@ again: */ rap->rxa_age = ticks; } -#endif /* IEEE80211_AMPDU_AGE */ + /* save packet */ if (rap->rxa_m[off] == NULL) { rap->rxa_m[off] = m; @@ -1125,14 +1119,11 @@ ieee80211_ht_node_cleanup(struct ieee802 void ieee80211_ht_node_age(struct ieee80211_node *ni) { -#ifdef IEEE80211_AMPDU_AGE struct ieee80211vap *vap = ni->ni_vap; uint8_t tid; -#endif KASSERT(ni->ni_flags & IEEE80211_NODE_HT, ("not an HT sta")); -#ifdef IEEE80211_AMPDU_AGE for (tid = 0; tid < WME_NUM_TID; tid++) { struct ieee80211_rx_ampdu *rap; @@ -1155,7 +1146,6 @@ ieee80211_ht_node_age(struct ieee80211_n ampdu_rx_flush(ni, rap); } } -#endif /* IEEE80211_AMPDU_AGE */ } static struct ieee80211_channel *
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201604100335.u3A3ZIKs029790>