wil6210: serialize fw_recovery and start_ap
authorVladimir Kondratiev <qca_vkondrat@qca.qualcomm.com>
Mon, 17 Mar 2014 13:34:21 +0000 (15:34 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 17 Mar 2014 17:44:18 +0000 (13:44 -0400)
These methods can change device state, serialize with others
similar ones like up/down

Signed-off-by: Vladimir Kondratiev <qca_vkondrat@qca.qualcomm.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/wil6210/cfg80211.c
drivers/net/wireless/ath/wil6210/main.c

index 597540a307d8796527ad12f9024d10d4ad6b5c43..ed5a7e145027768f95fe80704f5fa9073b9863ee 100644 (file)
@@ -609,18 +609,20 @@ static int wil_cfg80211_start_ap(struct wiphy *wiphy,
        if (wil_fix_bcon(wil, bcon))
                wil_dbg_misc(wil, "Fixed bcon\n");
 
+       mutex_lock(&wil->mutex);
+
        rc = wil_reset(wil);
        if (rc)
-               return rc;
+               goto out;
 
        /* Rx VRING. */
        rc = wil_rx_init(wil);
        if (rc)
-               return rc;
+               goto out;
 
        rc = wmi_set_ssid(wil, info->ssid_len, info->ssid);
        if (rc)
-               return rc;
+               goto out;
 
        /* MAC address - pre-requisite for other commands */
        wmi_set_mac_address(wil, ndev->dev_addr);
@@ -644,11 +646,13 @@ static int wil_cfg80211_start_ap(struct wiphy *wiphy,
        rc = wmi_pcp_start(wil, info->beacon_interval, wmi_nettype,
                           channel->hw_value);
        if (rc)
-               return rc;
+               goto out;
 
 
        netif_carrier_on(ndev);
 
+out:
+       mutex_unlock(&wil->mutex);
        return rc;
 }
 
@@ -658,8 +662,11 @@ static int wil_cfg80211_stop_ap(struct wiphy *wiphy,
        int rc = 0;
        struct wil6210_priv *wil = wiphy_to_wil(wiphy);
 
+       mutex_lock(&wil->mutex);
+
        rc = wmi_pcp_stop(wil);
 
+       mutex_unlock(&wil->mutex);
        return rc;
 }
 
index 32ac1b906abefd51e7d0faa5eca5102515d663e4..351925b5d2c8304815b9608af21c76fdb313b6ae 100644 (file)
@@ -159,6 +159,7 @@ static void wil_fw_error_worker(struct work_struct *work)
        if (no_fw_recovery)
                return;
 
+       mutex_lock(&wil->mutex);
        switch (wdev->iftype) {
        case NL80211_IFTYPE_STATION:
        case NL80211_IFTYPE_P2P_CLIENT:
@@ -176,6 +177,7 @@ static void wil_fw_error_worker(struct work_struct *work)
        default:
                break;
        }
+       mutex_unlock(&wil->mutex);
 }
 
 static int wil_find_free_vring(struct wil6210_priv *wil)