staging: brcm80211: removed locks around Mac80211 calls
authorRoland Vossen <rvossen@broadcom.com>
Wed, 23 Feb 2011 11:48:52 +0000 (12:48 +0100)
committerGreg Kroah-Hartman <gregkh@suse.de>
Wed, 23 Feb 2011 22:08:05 +0000 (14:08 -0800)
A spinlock was acquired prior to calling the Mac80211 functions
ieee80211_wake_queues() and ieee80211_stop_queues() and Cfg80211 functions
wiphy_rfkill_set_hw_state() and wiphy_rfkill_start_polling().
This is not required and could even lead to instability. Therefore the locks
were removed.

Signed-off-by: Roland Vossen <rvossen@broadcom.com>
Reviewed-by: Arend van Spriel <arend@broadcom.com>
Reviewed-by: Brett Rudley <brudley@broadcom.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/staging/brcm80211/brcmsmac/wl_mac80211.c

index 3109e3da31d154acd3645e2fee5ca849d4fb5a9f..791329cbc8a68db6fe48b453be05a8b52d479b67 100644 (file)
@@ -171,9 +171,7 @@ static int wl_ops_start(struct ieee80211_hw *hw)
          WL_NONE("%s : Initial channel: %d\n", __func__, curchan->hw_value);
        */
 
-       WL_LOCK(wl);
        ieee80211_wake_queues(hw);
-       WL_UNLOCK(wl);
        blocked = wl_rfkill_set_hw_state(wl);
        if (!blocked)
                wiphy_rfkill_stop_polling(wl->pub->ieee_hw->wiphy);
@@ -185,9 +183,8 @@ static void wl_ops_stop(struct ieee80211_hw *hw)
 {
        struct wl_info *wl = hw->priv;
        ASSERT(wl);
-       WL_LOCK(wl);
        ieee80211_stop_queues(hw);
-       WL_UNLOCK(wl);
+       return;
 }
 
 static int
@@ -1988,8 +1985,10 @@ bool wl_rfkill_set_hw_state(struct wl_info *wl)
 
        WL_NONE("%s: update hw state: blocked=%s\n", __func__,
                blocked ? "true" : "false");
+       WL_UNLOCK(wl);
        wiphy_rfkill_set_hw_state(wl->pub->ieee_hw->wiphy, blocked);
        if (blocked)
                wiphy_rfkill_start_polling(wl->pub->ieee_hw->wiphy);
+       WL_LOCK(wl);
        return blocked;
 }