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

Commit 6b20d774 authored by Luciano Coelho's avatar Luciano Coelho Committed by Emmanuel Grumbach
Browse files

iwlwifi: mvm: only save csa_vif in AP/GO mode



We only need the csa_vif in AP/GO modes, and assigning for other
interfaces may cause problems, because csa_vif is never cleared.  To
prevent this, only assign the value if the iftype is
NL80211_IFTYPE_AP.  Use a switch to do this, even though, for now,
only the AP interface type is handled, because soon other interface
types will be added as well.

Additionally, convert the WARN() in the error case when a
channel-switch is already running to WARN_ONCE().

Signed-off-by: default avatarLuciano Coelho <luciano.coelho@intel.com>
parent f028905c
Loading
Loading
Loading
Loading
+18 −10
Original line number Diff line number Diff line
@@ -3110,17 +3110,25 @@ static int iwl_mvm_pre_channel_switch(struct ieee80211_hw *hw,

	mutex_lock(&mvm->mutex);

	csa_vif = rcu_dereference_protected(mvm->csa_vif,
	IWL_DEBUG_MAC80211(mvm, "pre CSA to freq %d\n",
			   chsw->chandef.center_freq1);

	switch (vif->type) {
	case NL80211_IFTYPE_AP:
		csa_vif =
			rcu_dereference_protected(mvm->csa_vif,
						  lockdep_is_held(&mvm->mutex));
	if (WARN(csa_vif && csa_vif->csa_active,
		if (WARN_ONCE(csa_vif && csa_vif->csa_active,
			      "Another CSA is already in progress")) {
			ret = -EBUSY;
			goto out_unlock;
		}

	IWL_DEBUG_MAC80211(mvm, "CSA started to freq %d\n",
			   chsw->chandef.center_freq1);
		rcu_assign_pointer(mvm->csa_vif, vif);
		break;
	default:
		break;
	}

	ret = 0;