iwlwifi: fix FW restart on init FW
authorAmit Beka <amit.beka@intel.com>
Mon, 6 Aug 2012 14:01:05 +0000 (17:01 +0300)
committerJohannes Berg <johannes.berg@intel.com>
Tue, 21 Aug 2012 16:32:09 +0000 (18:32 +0200)
When unregistered with mac80211, we can't call its functionality
for FW restart, so avoid it and prevent automatic FW restart for
the init firmware.

Signed-off-by: Amit Beka <amit.beka@intel.com>
Reviewed-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
drivers/net/wireless/iwlwifi/dvm/main.c

index ab7b9ed00b8f01e38f7a846c3f95973b37fca3d7..7ff3f14306784169f886e5c7ca570d8b217a7309 100644 (file)
@@ -862,7 +862,8 @@ void iwl_down(struct iwl_priv *priv)
         * No race since we hold the mutex here and a new one
         * can't come in at this time.
         */
-       ieee80211_remain_on_channel_expired(priv->hw);
+       if (priv->ucode_loaded && priv->cur_ucode != IWL_UCODE_INIT)
+               ieee80211_remain_on_channel_expired(priv->hw);
 
        exit_pending =
                test_and_set_bit(STATUS_EXIT_PENDING, &priv->status);
@@ -994,7 +995,11 @@ static void iwl_bg_restart(struct work_struct *data)
                iwlagn_prepare_restart(priv);
                mutex_unlock(&priv->mutex);
                iwl_cancel_deferred_work(priv);
-               ieee80211_restart_hw(priv->hw);
+               if (priv->mac80211_registered)
+                       ieee80211_restart_hw(priv->hw);
+               else
+                       IWL_ERR(priv,
+                               "Cannot request restart before registrating with mac80211");
        } else {
                WARN_ON(1);
        }