diff options
Diffstat (limited to 'package')
| -rw-r--r-- | package/mac80211/patches/550-ath9k_tsf_fix.patch | 44 | 
1 files changed, 44 insertions, 0 deletions
| diff --git a/package/mac80211/patches/550-ath9k_tsf_fix.patch b/package/mac80211/patches/550-ath9k_tsf_fix.patch new file mode 100644 index 000000000..8a99ed7a2 --- /dev/null +++ b/package/mac80211/patches/550-ath9k_tsf_fix.patch @@ -0,0 +1,44 @@ +ath9k_rx_skb_preprocess nulls rxs and the mactime is never set again - +mactime is always 0. This causes problems in IBSS mode. + +ieee80211_rx_bss_info uses mactime to decide if an IBSS merge is needed. +Without this patch the merge is triggered by each beacon received. + +This can be recognized by the "beacon TSF higher than local TSF - IBSS +merge with BSSID" log message accompanying each beacon. + +This problem was not completely fixed in commit +a6d2055b02dde1067075795274672720baadd3ca and is not a stable kernel fix. +It is solely intended for wireless-testing. + +Signed-off-by: Jan Friedrich <jft@dev2day.de> +--- + drivers/net/wireless/ath/ath9k/recv.c |   10 +++++----- + 1 files changed, 5 insertions(+), 5 deletions(-) + +--- a/drivers/net/wireless/ath/ath9k/recv.c ++++ b/drivers/net/wireless/ath/ath9k/recv.c +@@ -1140,6 +1140,11 @@ int ath_rx_tasklet(struct ath_softc *sc, + 		if (flush) + 			goto requeue; +  ++		retval = ath9k_rx_skb_preprocess(common, hw, hdr, &rs, ++						 rxs, &decrypt_error); ++		if (retval) ++			goto requeue; ++ + 		rxs->mactime = (tsf & ~0xffffffffULL) | rs.rs_tstamp; + 		if (rs.rs_tstamp > tsf_lower && + 		    unlikely(rs.rs_tstamp - tsf_lower > 0x10000000)) +@@ -1149,11 +1154,6 @@ int ath_rx_tasklet(struct ath_softc *sc, + 		    unlikely(tsf_lower - rs.rs_tstamp > 0x10000000)) + 			rxs->mactime += 0x100000000ULL; +  +-		retval = ath9k_rx_skb_preprocess(common, hw, hdr, &rs, +-						 rxs, &decrypt_error); +-		if (retval) +-			goto requeue; +- + 		/* Ensure we always have an skb to requeue once we are done + 		 * processing the current buffer's skb */ + 		requeue_skb = ath_rxbuf_alloc(common, common->rx_bufsize, GFP_ATOMIC); | 
