Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1e4d19ca authored by Luciano Coelho's avatar Luciano Coelho Committed by Emmanuel Grumbach
Browse files

iwlwifi: mvm: move the check if associated outside of the iterator for wowlan



Instead of checking if we are associated when suspending with wowlan
enabled in the interface iterator, allow it to return an unassociated
vif and move the check to the main suspend function.  This will be
needed by netdetect, since it should also work when we are not
associated but the vif is active.

Signed-off-by: default avatarLuciano Coelho <luciano.coelho@intel.com>
Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
parent 671b5820
Loading
Loading
Loading
Loading
+25 −23
Original line number Diff line number Diff line
@@ -611,14 +611,10 @@ static void iwl_mvm_d3_iface_iterator(void *_data, u8 *mac,
				      struct ieee80211_vif *vif)
{
	struct iwl_d3_iter_data *data = _data;
	struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif);

	if (vif->type != NL80211_IFTYPE_STATION || vif->p2p)
		return;

	if (mvmvif->ap_sta_id == IWL_MVM_STATION_COUNT)
		return;

	if (data->vif) {
		IWL_ERR(data->mvm, "More than one managed interface active!\n");
		data->error = true;
@@ -1029,7 +1025,7 @@ static int __iwl_mvm_suspend(struct ieee80211_hw *hw,

	mutex_lock(&mvm->mutex);

	/* see if there's only a single BSS vif and it's associated */
	/* see if there's only a single BSS vif */
	ieee80211_iterate_active_interfaces_atomic(
		mvm->hw, IEEE80211_IFACE_ITER_NORMAL,
		iwl_mvm_d3_iface_iterator, &suspend_iter_data);
@@ -1042,6 +1038,8 @@ static int __iwl_mvm_suspend(struct ieee80211_hw *hw,
	vif = suspend_iter_data.vif;
	mvmvif = iwl_mvm_vif_from_mac80211(vif);

	/* if we're associated, this is wowlan */
	if (mvmvif->ap_sta_id != IWL_MVM_STATION_COUNT) {
		ap_sta = rcu_dereference_protected(
			mvm->fw_id_to_mac_id[mvmvif->ap_sta_id],
			lockdep_is_held(&mvm->mutex));
@@ -1050,8 +1048,8 @@ static int __iwl_mvm_suspend(struct ieee80211_hw *hw,
			goto out_noreset;
		}

	ret = iwl_mvm_get_wowlan_config(mvm, wowlan, &wowlan_config_cmd, vif,
					mvmvif, ap_sta);
		ret = iwl_mvm_get_wowlan_config(mvm, wowlan, &wowlan_config_cmd,
						vif, mvmvif, ap_sta);
		if (ret)
			goto out_noreset;

@@ -1063,6 +1061,10 @@ static int __iwl_mvm_suspend(struct ieee80211_hw *hw,
					    vif, mvmvif, ap_sta);
		if (ret)
			goto out;
	} else {
		ret = 1;
		goto out_noreset;
	}

	ret = iwl_mvm_power_update_device(mvm);
	if (ret)