From aff855b16d7f794ac9d59cb1fff05d95021d8a30 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Wed, 4 Aug 2010 17:26:56 +0000 Subject: [PATCH] ath9k: fix rx tsf parsing git-svn-id: svn://svn.openwrt.org/openwrt/trunk@22493 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- .../mac80211/patches/550-ath9k_tsf_fix.patch | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 package/mac80211/patches/550-ath9k_tsf_fix.patch 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 +--- + 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);