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

Commit 8be30c13 authored by Ayala Beker's avatar Ayala Beker Committed by Emmanuel Grumbach
Browse files

iwlwifi: mvm: Change number of associated stations when station becomes associated



Currently, the number of associated stations gets updated when adding
a new station or removing it. This is incorrect as it's possible that
a station was inserted before it was associated
Fix this by increasing/decreasing ap_assoc_sta_count whenever
a station transitions in/out the associated state.

Signed-off-by: default avatarAyala Beker <ayala.beker@intel.com>
Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
parent 8d0e4f8f
Loading
Loading
Loading
Loading
+8 −6
Original line number Original line Diff line number Diff line
@@ -2248,7 +2248,6 @@ static void iwl_mvm_sta_pre_rcu_remove(struct ieee80211_hw *hw,
				       struct ieee80211_sta *sta)
				       struct ieee80211_sta *sta)
{
{
	struct iwl_mvm *mvm = IWL_MAC80211_GET_MVM(hw);
	struct iwl_mvm *mvm = IWL_MAC80211_GET_MVM(hw);
	struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif);
	struct iwl_mvm_sta *mvm_sta = iwl_mvm_sta_from_mac80211(sta);
	struct iwl_mvm_sta *mvm_sta = iwl_mvm_sta_from_mac80211(sta);


	/*
	/*
@@ -2264,11 +2263,6 @@ static void iwl_mvm_sta_pre_rcu_remove(struct ieee80211_hw *hw,
		rcu_assign_pointer(mvm->fw_id_to_mac_id[mvm_sta->sta_id],
		rcu_assign_pointer(mvm->fw_id_to_mac_id[mvm_sta->sta_id],
				   ERR_PTR(-ENOENT));
				   ERR_PTR(-ENOENT));


	if (mvm_sta->vif->type == NL80211_IFTYPE_AP) {
		mvmvif->ap_assoc_sta_count--;
		iwl_mvm_mac_ctxt_changed(mvm, vif, false, NULL);
	}

	mutex_unlock(&mvm->mutex);
	mutex_unlock(&mvm->mutex);
}
}


@@ -2380,6 +2374,10 @@ static int iwl_mvm_mac_sta_state(struct ieee80211_hw *hw,
		ret = 0;
		ret = 0;
	} else if (old_state == IEEE80211_STA_AUTH &&
	} else if (old_state == IEEE80211_STA_AUTH &&
		   new_state == IEEE80211_STA_ASSOC) {
		   new_state == IEEE80211_STA_ASSOC) {
		if (vif->type == NL80211_IFTYPE_AP) {
			mvmvif->ap_assoc_sta_count++;
			iwl_mvm_mac_ctxt_changed(mvm, vif, false, NULL);
		}
		ret = iwl_mvm_update_sta(mvm, vif, sta);
		ret = iwl_mvm_update_sta(mvm, vif, sta);
		if (ret == 0)
		if (ret == 0)
			iwl_mvm_rs_rate_init(mvm, sta,
			iwl_mvm_rs_rate_init(mvm, sta,
@@ -2406,6 +2404,10 @@ static int iwl_mvm_mac_sta_state(struct ieee80211_hw *hw,
		ret = 0;
		ret = 0;
	} else if (old_state == IEEE80211_STA_ASSOC &&
	} else if (old_state == IEEE80211_STA_ASSOC &&
		   new_state == IEEE80211_STA_AUTH) {
		   new_state == IEEE80211_STA_AUTH) {
		if (vif->type == NL80211_IFTYPE_AP) {
			mvmvif->ap_assoc_sta_count--;
			iwl_mvm_mac_ctxt_changed(mvm, vif, false, NULL);
		}
		ret = 0;
		ret = 0;
	} else if (old_state == IEEE80211_STA_AUTH &&
	} else if (old_state == IEEE80211_STA_AUTH &&
		   new_state == IEEE80211_STA_NONE) {
		   new_state == IEEE80211_STA_NONE) {
+0 −5
Original line number Original line Diff line number Diff line
@@ -278,11 +278,6 @@ int iwl_mvm_add_sta(struct iwl_mvm *mvm,
	if (sta_id == IWL_MVM_STATION_COUNT)
	if (sta_id == IWL_MVM_STATION_COUNT)
		return -ENOSPC;
		return -ENOSPC;


	if (vif->type == NL80211_IFTYPE_AP) {
		mvmvif->ap_assoc_sta_count++;
		iwl_mvm_mac_ctxt_changed(mvm, vif, false, NULL);
	}

	spin_lock_init(&mvm_sta->lock);
	spin_lock_init(&mvm_sta->lock);


	mvm_sta->sta_id = sta_id;
	mvm_sta->sta_id = sta_id;