summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Tarnyagin <dmitry.tarnyagin@stericsson.com>2011-08-11 10:45:34 +0200
committerPhilippe LANGLAIS <philippe.langlais@stericsson.com>2011-10-13 10:01:39 +0200
commitd5a3fa778b5d9e7e15f98f316d0aaff79d1a4843 (patch)
treeeedb239bb0969b5843adca21564d949d6916c57b
parenta110b4f06c29a3b5e70d74bcd0144000646bd061 (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-xdrivers/staging/cw1200/ap.c4
-rw-r--r--drivers/staging/cw1200/sta.c4
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);