aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/ath/if_ath.c
diff options
context:
space:
mode:
authorAdrian Chadd <adrian@FreeBSD.org>2014-04-23 05:19:45 +0000
committerAdrian Chadd <adrian@FreeBSD.org>2014-04-23 05:19:45 +0000
commit656380e7259d00c79319cedebc6d19da4e34ac61 (patch)
tree08eb30596a6ffcf01e0ebd45dc0ac8c7ea23b0df /sys/dev/ath/if_ath.c
parent2809a6dfa483234bcffa52fda9ee895157086f0f (diff)
downloadsrc-656380e7259d00c79319cedebc6d19da4e34ac61.tar.gz
src-656380e7259d00c79319cedebc6d19da4e34ac61.zip
Wrap the rate control re-init code in a lock, to serialise it with
concurrent updates from any completing transmits in other threads. This was exposed when doing power save work - net80211 is constantly doing reassociations and it's causing the rate control state to get blanked out. This could cause the rate control code to assert. This should be MFCed to stable/10 as it's a stability fix. Tested: * AR5416, STA MFC after: 7 days
Notes
Notes: svn path=/head/; revision=264798
Diffstat (limited to 'sys/dev/ath/if_ath.c')
-rw-r--r--sys/dev/ath/if_ath.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/sys/dev/ath/if_ath.c b/sys/dev/ath/if_ath.c
index a5bbe4262786..6c98e603a835 100644
--- a/sys/dev/ath/if_ath.c
+++ b/sys/dev/ath/if_ath.c
@@ -5567,7 +5567,9 @@ ath_newassoc(struct ieee80211_node *ni, int isnew)
an->an_mcastrix = ath_tx_findrix(sc, tp->mcastrate);
an->an_mgmtrix = ath_tx_findrix(sc, tp->mgmtrate);
+ ATH_NODE_LOCK(an);
ath_rate_newassoc(sc, an, isnew);
+ ATH_NODE_UNLOCK(an);
if (isnew &&
(vap->iv_flags & IEEE80211_F_PRIVACY) == 0 && sc->sc_hasclrkey &&