iwlwifi: mvm: don't iterate interfaces to disconnect in net-detect
We shouldn't call iwl_mvm_d3_disconnect_iter() on the running interfaces when we are woken up due to net-detect, because it doesn't make sense. Additionally, this seems to set the IEEE80211_SDATA_DISCONNECT_RESUME flag that will cause a disconnection on the next resume (if a normal WoWLAN is used). To solve this, skip the iteration loop when net-detect is set. Signed-off-by: Luciano Coelho <luciano.coelho@intel.com> Reported-by: Samuel Tan <samueltan@chromium.org> Reviewed-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
This commit is contained in:
parent
7e1223b500
commit
e0ede17789
@ -1876,25 +1876,28 @@ static int __iwl_mvm_resume(struct iwl_mvm *mvm, bool test)
|
|||||||
|
|
||||||
if (mvm->net_detect) {
|
if (mvm->net_detect) {
|
||||||
iwl_mvm_query_netdetect_reasons(mvm, vif);
|
iwl_mvm_query_netdetect_reasons(mvm, vif);
|
||||||
|
/* has unlocked the mutex, so skip that */
|
||||||
|
goto out;
|
||||||
} else {
|
} else {
|
||||||
keep = iwl_mvm_query_wakeup_reasons(mvm, vif);
|
keep = iwl_mvm_query_wakeup_reasons(mvm, vif);
|
||||||
#ifdef CONFIG_IWLWIFI_DEBUGFS
|
#ifdef CONFIG_IWLWIFI_DEBUGFS
|
||||||
if (keep)
|
if (keep)
|
||||||
mvm->keep_vif = vif;
|
mvm->keep_vif = vif;
|
||||||
|
/* has unlocked the mutex, so skip that */
|
||||||
|
goto out_iterate;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
/* has unlocked the mutex, so skip that */
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
out_unlock:
|
out_unlock:
|
||||||
mutex_unlock(&mvm->mutex);
|
mutex_unlock(&mvm->mutex);
|
||||||
|
|
||||||
out:
|
out_iterate:
|
||||||
if (!test)
|
if (!test)
|
||||||
ieee80211_iterate_active_interfaces_rtnl(mvm->hw,
|
ieee80211_iterate_active_interfaces_rtnl(mvm->hw,
|
||||||
IEEE80211_IFACE_ITER_NORMAL,
|
IEEE80211_IFACE_ITER_NORMAL,
|
||||||
iwl_mvm_d3_disconnect_iter, keep ? vif : NULL);
|
iwl_mvm_d3_disconnect_iter, keep ? vif : NULL);
|
||||||
|
|
||||||
|
out:
|
||||||
/* return 1 to reconfigure the device */
|
/* return 1 to reconfigure the device */
|
||||||
set_bit(IWL_MVM_STATUS_IN_HW_RESTART, &mvm->status);
|
set_bit(IWL_MVM_STATUS_IN_HW_RESTART, &mvm->status);
|
||||||
set_bit(IWL_MVM_STATUS_D3_RECONFIG, &mvm->status);
|
set_bit(IWL_MVM_STATUS_D3_RECONFIG, &mvm->status);
|
||||||
|
Loading…
Reference in New Issue
Block a user