diff options
author | Dmitry Tarnyagin <dmitry.tarnyagin@stericsson.com> | 2011-08-11 10:45:34 +0200 |
---|---|---|
committer | Philippe LANGLAIS <philippe.langlais@stericsson.com> | 2011-10-13 10:01:39 +0200 |
commit | d5a3fa778b5d9e7e15f98f316d0aaff79d1a4843 (patch) | |
tree | eedb239bb0969b5843adca21564d949d6916c57b | |
parent | a110b4f06c29a3b5e70d74bcd0144000646bd061 (diff) |
cw1200: Syncing join status by wsm_tx_lock().
All operations changing join_status should be executed with
wsm_tx_lock() held.
Change-Id: Iadea249b080f1d7c090868c527ff78eecb53a26a
Signed-off-by: Dmitry Tarnyagin <dmitry.tarnyagin@stericsson.com>
Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/28595
Tested-by: Janusz DZIEDZIC <janusz.dziedzic@tieto.com>
Reviewed-by: Janusz DZIEDZIC <janusz.dziedzic@tieto.com>
Reviewed-by: Bartosz MARKOWSKI <bartosz.markowski@tieto.com>
Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/28697
Tested-by: Bartosz MARKOWSKI <bartosz.markowski@tieto.com>
Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/33505
Reviewed-by: Philippe LANGLAIS <philippe.langlais@stericsson.com>
-rwxr-xr-x | drivers/staging/cw1200/ap.c | 4 | ||||
-rw-r--r-- | drivers/staging/cw1200/sta.c | 4 |
2 files changed, 8 insertions, 0 deletions
diff --git a/drivers/staging/cw1200/ap.c b/drivers/staging/cw1200/ap.c index 362a5560116..6fe254802c0 100755 --- a/drivers/staging/cw1200/ap.c +++ b/drivers/staging/cw1200/ap.c @@ -76,7 +76,9 @@ int cw1200_sta_remove(struct ieee80211_hw *hw, struct ieee80211_vif *vif, reset.link_id = sta_priv->link_id; priv->link_id_map &= ~BIT(sta_priv->link_id); sta_priv->link_id = 0; + wsm_lock_tx(priv); WARN_ON(wsm_reset(priv, &reset)); + wsm_unlock_tx(priv); } return 0; } @@ -676,10 +678,12 @@ static int cw1200_update_beaconing(struct cw1200_common *priv) if (priv->join_status != CW1200_JOIN_STATUS_AP || priv->beacon_int != conf->beacon_int) { ap_printk(KERN_DEBUG "ap restarting\n"); + wsm_lock_tx(priv); if (priv->join_status != CW1200_JOIN_STATUS_PASSIVE) WARN_ON(wsm_reset(priv, &reset)); priv->join_status = CW1200_JOIN_STATUS_PASSIVE; WARN_ON(cw1200_start_ap(priv)); + wsm_unlock_tx(priv); } else ap_printk(KERN_DEBUG "ap started join_status: %d\n", priv->join_status); diff --git a/drivers/staging/cw1200/sta.c b/drivers/staging/cw1200/sta.c index d6a25a27358..c1cedf6db52 100644 --- a/drivers/staging/cw1200/sta.c +++ b/drivers/staging/cw1200/sta.c @@ -230,11 +230,13 @@ void cw1200_remove_interface(struct ieee80211_hw *dev, priv->mode = NL80211_IFTYPE_MONITOR; memset(priv->mac_addr, 0, ETH_ALEN); memset(priv->bssid, 0, ETH_ALEN); + wsm_lock_tx(priv); WARN_ON(wsm_reset(priv, &reset)); cw1200_free_keys(priv); cw1200_setup_mac(priv); priv->listening = false; priv->join_status = CW1200_JOIN_STATUS_PASSIVE; + wsm_unlock_tx(priv); mutex_unlock(&priv->conf_mutex); } @@ -489,7 +491,9 @@ void cw1200_configure_filter(struct ieee80211_hw *dev, FIF_PROBE_REQ)) ? 1 : 0; if (priv->listening ^ listening) { priv->listening = listening; + wsm_lock_tx(priv); cw1200_update_listening(priv, listening); + wsm_unlock_tx(priv); } cw1200_update_filtering(priv); mutex_unlock(&priv->conf_mutex); |