aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi/iwl3945-base.c
diff options
context:
space:
mode:
authorStanislaw Gruszka <sgruszka@redhat.com>2010-09-13 08:46:35 -0400
committerJohn W. Linville <linville@tuxdriver.com>2010-09-14 16:08:04 -0400
commitd745d472afcbc6354ebfee008123894a7f37e97e (patch)
tree9e7fc766ff7c4cafd9d50ff5e0f2e28fd3e4e60e /drivers/net/wireless/iwlwifi/iwl3945-base.c
parentd5926d9d6a183d109060f68c0b96ea2b33c15377 (diff)
iwlwifi: cancel scan when down the device
Always cancel scan when stooping device and scan is currently pending, we should newer have scan running after down device. To assure we start scan cancel from restart work we have to schedule abort_scan to different workqueue than priv->workqueue. Patch fix not cancel scanning when restarting firmware, what is one of the causes of wdev_cleanup_work warning (together with permanent network connection lost) reported at https://bugzilla.redhat.com/show_bug.cgi?id=593566 Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com> Acked-by: Wey-Yi W Guy <wey-yi.w.guy@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl3945-base.c')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl3945-base.c16
1 files changed, 4 insertions, 12 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c
index fc553bacef17..6cc5ba2a2e39 100644
--- a/drivers/net/wireless/iwlwifi/iwl3945-base.c
+++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c
@@ -2567,12 +2567,13 @@ static void iwl3945_cancel_deferred_work(struct iwl_priv *priv);
2567static void __iwl3945_down(struct iwl_priv *priv) 2567static void __iwl3945_down(struct iwl_priv *priv)
2568{ 2568{
2569 unsigned long flags; 2569 unsigned long flags;
2570 int exit_pending = test_bit(STATUS_EXIT_PENDING, &priv->status); 2570 int exit_pending;
2571 2571
2572 IWL_DEBUG_INFO(priv, DRV_NAME " is going down\n"); 2572 IWL_DEBUG_INFO(priv, DRV_NAME " is going down\n");
2573 2573
2574 if (!exit_pending) 2574 iwl_scan_cancel_timeout(priv, 200);
2575 set_bit(STATUS_EXIT_PENDING, &priv->status); 2575
2576 exit_pending = test_and_set_bit(STATUS_EXIT_PENDING, &priv->status);
2576 2577
2577 /* Stop TX queues watchdog. We need to have STATUS_EXIT_PENDING bit set 2578 /* Stop TX queues watchdog. We need to have STATUS_EXIT_PENDING bit set
2578 * to prevent rearm timer */ 2579 * to prevent rearm timer */
@@ -3172,15 +3173,6 @@ static void iwl3945_mac_stop(struct ieee80211_hw *hw)
3172 3173
3173 priv->is_open = 0; 3174 priv->is_open = 0;
3174 3175
3175 if (iwl_is_ready_rf(priv)) {
3176 /* stop mac, cancel any scan request and clear
3177 * RXON_FILTER_ASSOC_MSK BIT
3178 */
3179 mutex_lock(&priv->mutex);
3180 iwl_scan_cancel_timeout(priv, 100);
3181 mutex_unlock(&priv->mutex);
3182 }
3183
3184 iwl3945_down(priv); 3176 iwl3945_down(priv);
3185 3177
3186 flush_workqueue(priv->workqueue); 3178 flush_workqueue(priv->workqueue);