wifi: iwlwifi: mvm: change iwl_mvm_flush_sta() API
authorJohannes Berg <johannes.berg@intel.com>
Wed, 11 Oct 2023 10:07:28 +0000 (13:07 +0300)
committerJohannes Berg <johannes.berg@intel.com>
Mon, 23 Oct 2023 10:26:28 +0000 (12:26 +0200)
This API is type unsafe and needs an extra parameter to know
what kind of station was passed, so it has two, but really it
only needs two values. Just pass the values instead of doing
this type-unsafe dance, which will also make it better to use
for multi-link.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Gregory Greenman <gregory.greenman@intel.com>
Link: https://lore.kernel.org/r/20231011130030.aeb3bf4204cd.I5b0e6d64a67455784bc8fbdaf9ceaf03699d9ce1@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
drivers/net/wireless/intel/iwlwifi/mvm/mld-sta.c
drivers/net/wireless/intel/iwlwifi/mvm/mvm.h
drivers/net/wireless/intel/iwlwifi/mvm/sta.c
drivers/net/wireless/intel/iwlwifi/mvm/time-event.c
drivers/net/wireless/intel/iwlwifi/mvm/tx.c

index 7d96725da176606424a602b46f03aa79c3a33c0d..c142d5d0d414189690f98cbb9fc7fa3ce53993ef 100644 (file)
@@ -5674,7 +5674,8 @@ void iwl_mvm_mac_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
                }
 
                if (drop) {
-                       if (iwl_mvm_flush_sta(mvm, mvmsta, false))
+                       if (iwl_mvm_flush_sta(mvm, mvmsta->deflink.sta_id,
+                                             mvmsta->tfd_queue_msk))
                                IWL_ERR(mvm, "flush request fail\n");
                } else {
                        if (iwl_mvm_has_new_tx_api(mvm))
@@ -5711,7 +5712,8 @@ void iwl_mvm_mac_flush_sta(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
 
                mvmsta = iwl_mvm_sta_from_mac80211(sta);
 
-               if (iwl_mvm_flush_sta(mvm, mvmsta, false))
+               if (iwl_mvm_flush_sta(mvm, mvmsta->deflink.sta_id,
+                                     mvmsta->tfd_queue_msk))
                        IWL_ERR(mvm, "flush request fail\n");
        }
        mutex_unlock(&mvm->mutex);
index 1464aad039e12094de809f5ba3fe92ebf96683c3..ca5e4fbcf8ce53108448b4fe338658e04b820398 100644 (file)
@@ -347,7 +347,7 @@ static int iwl_mvm_mld_rm_int_sta(struct iwl_mvm *mvm,
                return -EINVAL;
 
        if (flush)
-               iwl_mvm_flush_sta(mvm, int_sta, true);
+               iwl_mvm_flush_sta(mvm, int_sta->sta_id, int_sta->tfd_queue_msk);
 
        iwl_mvm_mld_disable_txq(mvm, BIT(int_sta->sta_id), queuptr, tid);
 
index fda5ad4723ac13744e98c21169ff48924e606fff..f81f1ec3bb79a1d66dd0b454db267637411a9cad 100644 (file)
@@ -1674,7 +1674,7 @@ const char *iwl_mvm_get_tx_fail_reason(u32 status);
 static inline const char *iwl_mvm_get_tx_fail_reason(u32 status) { return ""; }
 #endif
 int iwl_mvm_flush_tx_path(struct iwl_mvm *mvm, u32 tfd_msk);
-int iwl_mvm_flush_sta(struct iwl_mvm *mvm, void *sta, bool internal);
+int iwl_mvm_flush_sta(struct iwl_mvm *mvm, u32 sta_id, u32 tfd_queue_mask);
 int iwl_mvm_flush_sta_tids(struct iwl_mvm *mvm, u32 sta_id, u16 tids);
 
 /* Utils to extract sta related data */
index 61d564735d57de837f2f2af7625da61716cbbc6e..d67103d3eea9286a84556210354922a3a4e32583 100644 (file)
@@ -2098,7 +2098,8 @@ int iwl_mvm_rm_sta(struct iwl_mvm *mvm,
                return ret;
 
        /* flush its queues here since we are freeing mvm_sta */
-       ret = iwl_mvm_flush_sta(mvm, mvm_sta, false);
+       ret = iwl_mvm_flush_sta(mvm, mvm_sta->deflink.sta_id,
+                               mvm_sta->tfd_queue_msk);
        if (ret)
                return ret;
        if (iwl_mvm_has_new_tx_api(mvm)) {
@@ -2409,7 +2410,8 @@ void iwl_mvm_free_bcast_sta_queues(struct iwl_mvm *mvm,
 
        lockdep_assert_held(&mvm->mutex);
 
-       iwl_mvm_flush_sta(mvm, &mvmvif->deflink.bcast_sta, true);
+       iwl_mvm_flush_sta(mvm, mvmvif->deflink.bcast_sta.sta_id,
+                         mvmvif->deflink.bcast_sta.tfd_queue_msk);
 
        switch (vif->type) {
        case NL80211_IFTYPE_AP:
@@ -2665,7 +2667,8 @@ int iwl_mvm_rm_mcast_sta(struct iwl_mvm *mvm, struct ieee80211_vif *vif)
 
        lockdep_assert_held(&mvm->mutex);
 
-       iwl_mvm_flush_sta(mvm, &mvmvif->deflink.mcast_sta, true);
+       iwl_mvm_flush_sta(mvm, mvmvif->deflink.mcast_sta.sta_id,
+                         mvmvif->deflink.mcast_sta.tfd_queue_msk);
 
        iwl_mvm_disable_txq(mvm, NULL, mvmvif->deflink.mcast_sta.sta_id,
                            &mvmvif->deflink.cab_queue, 0);
index 5cfdb2526d56bd1226f39ce04447691ab0d49304..7ab6cabda9a4b114e99be61a8438f94a50bcebf1 100644 (file)
@@ -81,8 +81,8 @@ void iwl_mvm_roc_done_wk(struct work_struct *wk)
                        struct ieee80211_vif *vif = mvm->p2p_device_vif;
 
                        mvmvif = iwl_mvm_vif_from_mac80211(vif);
-                       iwl_mvm_flush_sta(mvm, &mvmvif->deflink.bcast_sta,
-                                         true);
+                       iwl_mvm_flush_sta(mvm, mvmvif->deflink.bcast_sta.sta_id,
+                                         mvmvif->deflink.bcast_sta.tfd_queue_msk);
 
                        if (mvm->mld_api_is_used) {
                                iwl_mvm_mld_rm_bcast_sta(mvm, vif,
@@ -113,7 +113,8 @@ void iwl_mvm_roc_done_wk(struct work_struct *wk)
         */
        if (test_and_clear_bit(IWL_MVM_STATUS_ROC_AUX_RUNNING, &mvm->status)) {
                /* do the same in case of hot spot 2.0 */
-               iwl_mvm_flush_sta(mvm, &mvm->aux_sta, true);
+               iwl_mvm_flush_sta(mvm, mvm->aux_sta.sta_id,
+                                 mvm->aux_sta.tfd_queue_msk);
 
                if (mvm->mld_api_is_used) {
                        iwl_mvm_mld_rm_aux_sta(mvm);
index 674ddf951b79165f868669626041f243776cd468..b0f3d51a7613a654e83bd1fc9217d6d90529505e 100644 (file)
@@ -2317,24 +2317,10 @@ free_rsp:
        return ret;
 }
 
-int iwl_mvm_flush_sta(struct iwl_mvm *mvm, void *sta, bool internal)
+int iwl_mvm_flush_sta(struct iwl_mvm *mvm, u32 sta_id, u32 tfd_queue_mask)
 {
-       u32 sta_id, tfd_queue_msk;
-
-       if (internal) {
-               struct iwl_mvm_int_sta *int_sta = sta;
-
-               sta_id = int_sta->sta_id;
-               tfd_queue_msk = int_sta->tfd_queue_msk;
-       } else {
-               struct iwl_mvm_sta *mvm_sta = sta;
-
-               sta_id = mvm_sta->deflink.sta_id;
-               tfd_queue_msk = mvm_sta->tfd_queue_msk;
-       }
-
        if (iwl_mvm_has_new_tx_api(mvm))
                return iwl_mvm_flush_sta_tids(mvm, sta_id, 0xffff);
 
-       return iwl_mvm_flush_tx_path(mvm, tfd_queue_msk);
+       return iwl_mvm_flush_tx_path(mvm, tfd_queue_mask);
 }