diff options
author | Adrian Chadd <adrian@FreeBSD.org> | 2014-04-23 05:19:45 +0000 |
---|---|---|
committer | Adrian Chadd <adrian@FreeBSD.org> | 2014-04-23 05:19:45 +0000 |
commit | 656380e7259d00c79319cedebc6d19da4e34ac61 (patch) | |
tree | 08eb30596a6ffcf01e0ebd45dc0ac8c7ea23b0df /sys/dev/ath/if_ath.c | |
parent | 2809a6dfa483234bcffa52fda9ee895157086f0f (diff) | |
download | src-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.c | 2 |
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 && |