Skip to content

Commit

Permalink
iwlwifi: cancel scan when down the device
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Stanislaw Gruszka authored and John W. Linville committed Sep 14, 2010
1 parent d5926d9 commit d745d47
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 24 deletions.
14 changes: 3 additions & 11 deletions drivers/net/wireless/iwlwifi/iwl-agn.c
Original file line number Diff line number Diff line change
Expand Up @@ -2892,8 +2892,9 @@ static void __iwl_down(struct iwl_priv *priv)

IWL_DEBUG_INFO(priv, DRV_NAME " is going down\n");

if (!exit_pending)
set_bit(STATUS_EXIT_PENDING, &priv->status);
iwl_scan_cancel_timeout(priv, 200);

exit_pending = test_and_set_bit(STATUS_EXIT_PENDING, &priv->status);

/* Stop TX queues watchdog. We need to have STATUS_EXIT_PENDING bit set
* to prevent rearm timer */
Expand Down Expand Up @@ -3503,15 +3504,6 @@ static void iwl_mac_stop(struct ieee80211_hw *hw)

priv->is_open = 0;

if (iwl_is_ready_rf(priv) || test_bit(STATUS_SCAN_HW, &priv->status)) {
/* stop mac, cancel any scan request and clear
* RXON_FILTER_ASSOC_MSK BIT
*/
mutex_lock(&priv->mutex);
iwl_scan_cancel_timeout(priv, 100);
mutex_unlock(&priv->mutex);
}

iwl_down(priv);

flush_workqueue(priv->workqueue);
Expand Down
2 changes: 1 addition & 1 deletion drivers/net/wireless/iwlwifi/iwl-scan.c
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ int iwl_scan_cancel(struct iwl_priv *priv)
if (test_bit(STATUS_SCANNING, &priv->status)) {
if (!test_and_set_bit(STATUS_SCAN_ABORTING, &priv->status)) {
IWL_DEBUG_SCAN(priv, "Queuing scan abort.\n");
queue_work(priv->workqueue, &priv->abort_scan);
schedule_work(&priv->abort_scan);

} else
IWL_DEBUG_SCAN(priv, "Scan abort already in progress.\n");
Expand Down
16 changes: 4 additions & 12 deletions drivers/net/wireless/iwlwifi/iwl3945-base.c
Original file line number Diff line number Diff line change
Expand Up @@ -2567,12 +2567,13 @@ static void iwl3945_cancel_deferred_work(struct iwl_priv *priv);
static void __iwl3945_down(struct iwl_priv *priv)
{
unsigned long flags;
int exit_pending = test_bit(STATUS_EXIT_PENDING, &priv->status);
int exit_pending;

IWL_DEBUG_INFO(priv, DRV_NAME " is going down\n");

if (!exit_pending)
set_bit(STATUS_EXIT_PENDING, &priv->status);
iwl_scan_cancel_timeout(priv, 200);

exit_pending = test_and_set_bit(STATUS_EXIT_PENDING, &priv->status);

/* Stop TX queues watchdog. We need to have STATUS_EXIT_PENDING bit set
* to prevent rearm timer */
Expand Down Expand Up @@ -3172,15 +3173,6 @@ static void iwl3945_mac_stop(struct ieee80211_hw *hw)

priv->is_open = 0;

if (iwl_is_ready_rf(priv)) {
/* stop mac, cancel any scan request and clear
* RXON_FILTER_ASSOC_MSK BIT
*/
mutex_lock(&priv->mutex);
iwl_scan_cancel_timeout(priv, 100);
mutex_unlock(&priv->mutex);
}

iwl3945_down(priv);

flush_workqueue(priv->workqueue);
Expand Down

0 comments on commit d745d47

Please sign in to comment.