iwlwifi: mvm: take IWL_MVM_REF_UCODE_DOWN before restarting hw
authorEliad Peller <eliad@wizery.com>
Tue, 3 Mar 2015 10:03:20 +0000 (12:03 +0200)
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Thu, 19 Mar 2015 13:06:28 +0000 (15:06 +0200)
we unref IWL_MVM_REF_UCODE_DOWN on iwl_mvm_restart_complete().

Usually, the restart is initiated by iwl_mvm_nic_restart(),
which takes the reference before restarting the hw.

However, in D3 flow we might call ieee80211_restart_hw()
directly (in case of suspend error and on d3_test-resume),
which without taking the ref first. fix it.

Signed-off-by: Eliad Peller <eliadx.peller@intel.com>
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
drivers/net/wireless/iwlwifi/mvm/d3.c

index 5f8afa5f11a35f8da4761fb638d76f34f4f0a9eb..e730ea2b0812461e28f1cf6389461d7c28e2f43c 100644 (file)
@@ -1131,6 +1131,7 @@ static int __iwl_mvm_suspend(struct ieee80211_hw *hw,
        iwl_trans_d3_suspend(mvm->trans, test);
  out:
        if (ret < 0) {
+               iwl_mvm_ref(mvm, IWL_MVM_REF_UCODE_DOWN);
                ieee80211_restart_hw(mvm->hw);
                iwl_mvm_free_nd(mvm);
        }
@@ -2016,6 +2017,7 @@ static int iwl_mvm_d3_test_release(struct inode *inode, struct file *file)
        __iwl_mvm_resume(mvm, true);
        rtnl_unlock();
        iwl_abort_notification_waits(&mvm->notif_wait);
+       iwl_mvm_ref(mvm, IWL_MVM_REF_UCODE_DOWN);
        ieee80211_restart_hw(mvm->hw);
 
        /* wait for restart and disconnect all interfaces */