aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2010-08-04 17:26:56 +0000
committerFelix Fietkau <nbd@openwrt.org>2010-08-04 17:26:56 +0000
commitaff855b16d7f794ac9d59cb1fff05d95021d8a30 (patch)
tree3fc202fb27e2b20a9b55e393183d42806b826f6e
parent9acb6f5994bdb66f4ad7db72a1a510139bea2258 (diff)
downloadupstream-aff855b16d7f794ac9d59cb1fff05d95021d8a30.tar.gz
upstream-aff855b16d7f794ac9d59cb1fff05d95021d8a30.tar.bz2
upstream-aff855b16d7f794ac9d59cb1fff05d95021d8a30.zip
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.patch44
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 0000000000..8a99ed7a20
--- /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);