ath9k: Lock config_interface() callback with a mutex
authorSujith <Sujith.Manoharan@atheros.com>
Tue, 3 Mar 2009 04:46:57 +0000 (10:16 +0530)
committerJohn W. Linville <linville@tuxdriver.com>
Thu, 5 Mar 2009 19:39:42 +0000 (14:39 -0500)
Signed-off-by: Sujith <Sujith.Manoharan@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath9k/main.c

index a25dcf949f368f87db107f6bea7fe972e78cc6b9..d5b0035e9b9e6885d1d0a4f35c46822b008b5651 100644 (file)
@@ -2318,6 +2318,8 @@ static int ath9k_config_interface(struct ieee80211_hw *hw,
        u32 rfilt = 0;
        int error, i;
 
+       mutex_lock(&sc->mutex);
+
        /* TODO: Need to decide which hw opmode to use for multi-interface
         * cases */
        if (vif->type == NL80211_IFTYPE_AP &&
@@ -2373,8 +2375,10 @@ static int ath9k_config_interface(struct ieee80211_hw *hw,
                        ath9k_hw_stoptxdma(sc->sc_ah, sc->beacon.beaconq);
 
                        error = ath_beacon_alloc(sc, 0);
-                       if (error != 0)
+                       if (error != 0) {
+                               mutex_unlock(&sc->mutex);
                                return error;
+                       }
 
                        ath_beacon_config(sc, 0);
                }
@@ -2393,6 +2397,8 @@ static int ath9k_config_interface(struct ieee80211_hw *hw,
        if (vif->type == NL80211_IFTYPE_ADHOC)
                ath_update_chainmask(sc, 0);
 
+       mutex_unlock(&sc->mutex);
+
        return 0;
 }