mac80211: agg-tx: refactor sending addba
authorMordechay Goodstein <mordechay.goodstein@intel.com>
Thu, 26 Mar 2020 13:09:37 +0000 (15:09 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Fri, 24 Apr 2020 10:33:43 +0000 (12:33 +0200)
We move the actual arming the timer and sending ADDBA to a function
for the use in different places calling the same logic.

Signed-off-by: Mordechay Goodstein <mordechay.goodstein@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
Link: https://lore.kernel.org/r/iwlwifi.20200326150855.58a337eb90a1.I75934e6464535fbf43969acc796bc886291e79a5@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/agg-tx.c

index 33da6f7..32f40c4 100644 (file)
@@ -9,7 +9,7 @@
  * Copyright 2007, Michael Wu <flamingice@sourmilk.net>
  * Copyright 2007-2010, Intel Corporation
  * Copyright(c) 2015-2017 Intel Deutschland GmbH
- * Copyright (C) 2018 - 2019 Intel Corporation
+ * Copyright (C) 2018 - 2020 Intel Corporation
  */
 
 #include <linux/ieee80211.h>
@@ -448,6 +448,43 @@ static void sta_addba_resp_timer_expired(struct timer_list *t)
        ieee80211_stop_tx_ba_session(&sta->sta, tid);
 }
 
+static void ieee80211_send_addba_with_timeout(struct sta_info *sta,
+                                             struct tid_ampdu_tx *tid_tx)
+{
+       struct ieee80211_sub_if_data *sdata = sta->sdata;
+       struct ieee80211_local *local = sta->local;
+       u8 tid = tid_tx->tid;
+       u16 buf_size;
+
+       /* activate the timer for the recipient's addBA response */
+       mod_timer(&tid_tx->addba_resp_timer, jiffies + ADDBA_RESP_INTERVAL);
+       ht_dbg(sdata, "activated addBA response timer on %pM tid %d\n",
+              sta->sta.addr, tid);
+
+       spin_lock_bh(&sta->lock);
+       sta->ampdu_mlme.last_addba_req_time[tid] = jiffies;
+       sta->ampdu_mlme.addba_req_num[tid]++;
+       spin_unlock_bh(&sta->lock);
+
+       if (sta->sta.he_cap.has_he) {
+               buf_size = local->hw.max_tx_aggregation_subframes;
+       } else {
+               /*
+                * We really should use what the driver told us it will
+                * transmit as the maximum, but certain APs (e.g. the
+                * LinkSys WRT120N with FW v1.0.07 build 002 Jun 18 2012)
+                * will crash when we use a lower number.
+                */
+               buf_size = IEEE80211_MAX_AMPDU_BUF_HT;
+       }
+
+       /* send AddBA request */
+       ieee80211_send_addba_request(sdata, sta->sta.addr, tid,
+                                    tid_tx->dialog_token,
+                                    sta->tid_seq[tid] >> 4,
+                                    buf_size, tid_tx->timeout);
+}
+
 void ieee80211_tx_ba_session_handle_start(struct sta_info *sta, int tid)
 {
        struct tid_ampdu_tx *tid_tx;
@@ -462,7 +499,6 @@ void ieee80211_tx_ba_session_handle_start(struct sta_info *sta, int tid)
                .timeout = 0,
        };
        int ret;
-       u16 buf_size;
 
        tid_tx = rcu_dereference_protected_tid_tx(sta, tid);
 
@@ -508,32 +544,7 @@ void ieee80211_tx_ba_session_handle_start(struct sta_info *sta, int tid)
                return;
        }
 
-       /* activate the timer for the recipient's addBA response */
-       mod_timer(&tid_tx->addba_resp_timer, jiffies + ADDBA_RESP_INTERVAL);
-       ht_dbg(sdata, "activated addBA response timer on %pM tid %d\n",
-              sta->sta.addr, tid);
-
-       spin_lock_bh(&sta->lock);
-       sta->ampdu_mlme.last_addba_req_time[tid] = jiffies;
-       sta->ampdu_mlme.addba_req_num[tid]++;
-       spin_unlock_bh(&sta->lock);
-
-       if (sta->sta.he_cap.has_he) {
-               buf_size = local->hw.max_tx_aggregation_subframes;
-       } else {
-               /*
-                * We really should use what the driver told us it will
-                * transmit as the maximum, but certain APs (e.g. the
-                * LinkSys WRT120N with FW v1.0.07 build 002 Jun 18 2012)
-                * will crash when we use a lower number.
-                */
-               buf_size = IEEE80211_MAX_AMPDU_BUF_HT;
-       }
-
-       /* send AddBA request */
-       ieee80211_send_addba_request(sdata, sta->sta.addr, tid,
-                                    tid_tx->dialog_token, params.ssn,
-                                    buf_size, tid_tx->timeout);
+       ieee80211_send_addba_with_timeout(sta, tid_tx);
 }
 
 /*