net: wireless: bcmdhd: Fix CFG80211 suspend/resume if interface is down
Dmitry Shmidt [Mon, 11 Jul 2011 17:45:33 +0000 (10:45 -0700)]
Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>

drivers/net/wireless/bcmdhd/wl_cfg80211.c

index 3196da3..d9c7e65 100644 (file)
@@ -2594,10 +2594,16 @@ wl_cfg80211_set_bitrate_mask(struct wiphy *wiphy, struct net_device *dev,
 
 static s32 wl_cfg80211_resume(struct wiphy *wiphy)
 {
+       struct wl_priv *wl = WL_PRIV_GET();
        s32 err = 0;
 
-       CHECK_SYS_UP();
-       wl_invoke_iscan(WL_PRIV_GET());
+       if (unlikely(!test_bit(WL_STATUS_READY, &wl->status))) {
+               WL_INFO(("device is not ready : status (%d)\n",
+                       (int)wl->status));
+               return 0;
+       }
+
+       wl_invoke_iscan(wl);
 
        return err;
 }
@@ -2611,7 +2617,11 @@ static s32 wl_cfg80211_suspend(struct wiphy *wiphy)
        struct wl_priv *wl = WL_PRIV_GET();
        s32 err = 0;
 
-       CHECK_SYS_UP();
+       if (unlikely(!test_bit(WL_STATUS_READY, &wl->status))) {
+               WL_INFO(("device is not ready : status (%d)\n",
+                       (int)wl->status));
+               return 0;
+       }
 
        set_bit(WL_STATUS_SCAN_ABORTING, &wl->status);
        wl_term_iscan(wl);