ath5k: fix locking in ath5k_config
ath5k_config updates the software context without taking sc->lock. Changes-licensed-under: 3-Clause-BSD Signed-off-by: Bob Copeland <me@bobcopeland.com> Acked-by: Nick Kossifidis <mickflemm@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
committed by
John W. Linville
parent
667ecd010d
commit
be0093705c
@@ -1028,6 +1028,8 @@ ath5k_setup_bands(struct ieee80211_hw *hw)
|
|||||||
* it's done by reseting the chip. To accomplish this we must
|
* it's done by reseting the chip. To accomplish this we must
|
||||||
* first cleanup any pending DMA, then restart stuff after a la
|
* first cleanup any pending DMA, then restart stuff after a la
|
||||||
* ath5k_init.
|
* ath5k_init.
|
||||||
|
*
|
||||||
|
* Called with sc->lock.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
ath5k_chan_set(struct ath5k_softc *sc, struct ieee80211_channel *chan)
|
ath5k_chan_set(struct ath5k_softc *sc, struct ieee80211_channel *chan)
|
||||||
@@ -2814,11 +2816,17 @@ ath5k_config(struct ieee80211_hw *hw, u32 changed)
|
|||||||
{
|
{
|
||||||
struct ath5k_softc *sc = hw->priv;
|
struct ath5k_softc *sc = hw->priv;
|
||||||
struct ieee80211_conf *conf = &hw->conf;
|
struct ieee80211_conf *conf = &hw->conf;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
mutex_lock(&sc->lock);
|
||||||
|
|
||||||
sc->bintval = conf->beacon_int;
|
sc->bintval = conf->beacon_int;
|
||||||
sc->power_level = conf->power_level;
|
sc->power_level = conf->power_level;
|
||||||
|
|
||||||
return ath5k_chan_set(sc, conf->channel);
|
ret = ath5k_chan_set(sc, conf->channel);
|
||||||
|
|
||||||
|
mutex_unlock(&sc->lock);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
Reference in New Issue
Block a user