From d5a3fa778b5d9e7e15f98f316d0aaff79d1a4843 Mon Sep 17 00:00:00 2001 From: Dmitry Tarnyagin Date: Thu, 11 Aug 2011 10:45:34 +0200 Subject: 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 Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/28595 Tested-by: Janusz DZIEDZIC Reviewed-by: Janusz DZIEDZIC Reviewed-by: Bartosz MARKOWSKI Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/28697 Tested-by: Bartosz MARKOWSKI Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/33505 Reviewed-by: Philippe LANGLAIS --- drivers/staging/cw1200/ap.c | 4 ++++ drivers/staging/cw1200/sta.c | 4 ++++ 2 files changed, 8 insertions(+) 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); -- cgit v1.2.3