staging: rtl8192e: Add a spinlock around SetRFPowerState8190
authorMike McCormack <mikem@ring3k.org>
Thu, 3 Mar 2011 13:40:30 +0000 (22:40 +0900)
committerGreg Kroah-Hartman <gregkh@suse.de>
Mon, 7 Mar 2011 21:31:39 +0000 (13:31 -0800)
Signed-off-by: Mike McCormack <mikem@ring3k.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/staging/rtl8192e/r8190_rtl8256.c

index 8b182089b046bf87995a2c91bd1e97c61d709f6c..40a169df512350421ca6e451ca8c7f456bd5a10e 100644 (file)
@@ -327,8 +327,11 @@ SetRFPowerState8190(struct net_device *dev, RT_RF_POWER_STATE eRFPowerState)
        PRT_POWER_SAVE_CONTROL  pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->ieee80211->PowerSaveControl));
        bool bResult = true;
 
-       if(priv->SetRFPowerStateInProgress == true)
-               return false;
+       spin_lock(&priv->ps_lock);
+       if (priv->SetRFPowerStateInProgress) {
+               bResult = false;
+               goto out;
+       }
        priv->SetRFPowerStateInProgress = true;
 
        switch( eRFPowerState )
@@ -345,8 +348,8 @@ SetRFPowerState8190(struct net_device *dev, RT_RF_POWER_STATE eRFPowerState)
                         */
                        if (!NicIFEnableNIC(dev)) {
                                RT_TRACE(COMP_ERR, "%s(): NicIFEnableNIC failed\n",__FUNCTION__);
-                               priv->SetRFPowerStateInProgress = false;
-                               return false;
+                               bResult = false;
+                               goto out;
                        }
 
                        RT_CLEAR_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_HALT_NIC);
@@ -424,7 +427,9 @@ SetRFPowerState8190(struct net_device *dev, RT_RF_POWER_STATE eRFPowerState)
                priv->ieee80211->eRFPowerState = eRFPowerState;
        }
 
+out:
        priv->SetRFPowerStateInProgress = false;
+       spin_unlock(&priv->ps_lock);
        return bResult;
 }