wlcore: cancel recovery_work on stop() instead of remove_interface()
authorEliad Peller <eliad@wizery.com>
Sun, 29 Jul 2012 11:37:29 +0000 (14:37 +0300)
committerLuciano Coelho <luca@coelho.fi>
Thu, 27 Sep 2012 09:13:50 +0000 (12:13 +0300)
recovery_work should be cancelled when stopping the device,
not when removing an interface (this is probably a leftover
from the single-role days)

Signed-off-by: Eliad Peller <eliad@wizery.com>
Signed-off-by: Luciano Coelho <luca@coelho.fi>
drivers/net/wireless/ti/wlcore/main.c

index 21267c5b9705c3d84acc2d7c6fa5bc2b01040a12..612008f32992f22e025046320aa474a202ef7a24 100644 (file)
@@ -1857,6 +1857,8 @@ static void wlcore_op_stop_locked(struct wl1271 *wl)
        mutex_unlock(&wl->mutex);
 
        wlcore_synchronize_interrupts(wl);
+       if (!test_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS, &wl->flags))
+               cancel_work_sync(&wl->recovery_work);
        wl1271_flush_deferred_work(wl);
        cancel_delayed_work_sync(&wl->scan_complete_work);
        cancel_work_sync(&wl->netstack_work);
@@ -2437,7 +2439,6 @@ static void wl1271_op_remove_interface(struct ieee80211_hw *hw,
        struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
        struct wl12xx_vif *iter;
        struct vif_counter_data vif_count;
-       bool cancel_recovery = true;
 
        wl12xx_get_vif_count(hw, vif, &vif_count);
        mutex_lock(&wl->mutex);
@@ -2462,12 +2463,9 @@ static void wl1271_op_remove_interface(struct ieee80211_hw *hw,
                wl12xx_force_active_psm(wl);
                set_bit(WL1271_FLAG_INTENDED_FW_RECOVERY, &wl->flags);
                wl12xx_queue_recovery_work(wl);
-               cancel_recovery = false;
        }
 out:
        mutex_unlock(&wl->mutex);
-       if (cancel_recovery)
-               cancel_work_sync(&wl->recovery_work);
 }
 
 static int wl12xx_op_change_interface(struct ieee80211_hw *hw,