diff options
| author | nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2010-08-04 17:26:56 +0000 | 
|---|---|---|
| committer | nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2010-08-04 17:26:56 +0000 | 
| commit | 1eb6639f5e38e474968cfdb9fce2fb0441ad478a (patch) | |
| tree | 3fc202fb27e2b20a9b55e393183d42806b826f6e | |
| parent | 07f644954509f54143bf9a63249d7dcfdb3dcddd (diff) | |
ath9k: fix rx tsf parsing
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@22493 3c298f89-4303-0410-b956-a3cf2f4a3e73
| -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); | 
