diff options
author | Felix Fietkau <nbd@openwrt.org> | 2010-08-04 17:26:56 +0000 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2010-08-04 17:26:56 +0000 |
commit | aff855b16d7f794ac9d59cb1fff05d95021d8a30 (patch) | |
tree | 3fc202fb27e2b20a9b55e393183d42806b826f6e /package/mac80211/patches/550-ath9k_tsf_fix.patch | |
parent | 9acb6f5994bdb66f4ad7db72a1a510139bea2258 (diff) | |
download | upstream-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
Diffstat (limited to 'package/mac80211/patches/550-ath9k_tsf_fix.patch')
-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 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); |