linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] mac80211: simplify TX aggregation start
@ 2019-10-01 20:06 Johannes Berg
  2019-10-02  4:25 ` kbuild test robot
  2019-10-02  9:08 ` Stanislaw Gruszka
  0 siblings, 2 replies; 4+ messages in thread
From: Johannes Berg @ 2019-10-01 20:06 UTC (permalink / raw)
  To: linux-wireless; +Cc: Johannes Berg

From: Johannes Berg <johannes.berg@intel.com>

There really is no need to make drivers call the
ieee80211_start_tx_ba_cb_irqsafe() function and then
schedule the worker if all we want is to set a bit.

Add a new return value (that was previously considered
invalid) to indicate that the driver is immediately
ready for the session, and make drivers use it. The
only drivers that remain different are the Intel ones
as they need to negotiate more with the firmware.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
---
 drivers/net/wireless/ath/ath9k/htc_drv_main.c         |  2 +-
 drivers/net/wireless/ath/ath9k/main.c                 |  2 +-
 drivers/net/wireless/ath/carl9170/main.c              |  3 +--
 drivers/net/wireless/ath/wcn36xx/main.c               |  5 +++--
 .../broadcom/brcm80211/brcmsmac/mac80211_if.c         |  3 +--
 drivers/net/wireless/intel/iwlegacy/4965-mac.c        |  2 +-
 drivers/net/wireless/intel/iwlwifi/dvm/tx.c           |  2 +-
 drivers/net/wireless/intel/iwlwifi/mvm/sta.c          |  5 ++---
 drivers/net/wireless/mac80211_hwsim.c                 |  3 +--
 drivers/net/wireless/marvell/mwl8k.c                  |  2 +-
 drivers/net/wireless/mediatek/mt76/mt7603/main.c      |  3 +--
 drivers/net/wireless/mediatek/mt76/mt7615/main.c      |  3 +--
 drivers/net/wireless/mediatek/mt76/mt76x02_util.c     |  3 +--
 drivers/net/wireless/mediatek/mt7601u/main.c          |  3 +--
 drivers/net/wireless/ralink/rt2x00/rt2800lib.c        |  2 +-
 drivers/net/wireless/realtek/rtlwifi/base.c           |  3 +--
 drivers/net/wireless/realtek/rtw88/mac80211.c         |  3 +--
 drivers/net/wireless/rsi/rsi_91x_mac80211.c           |  3 +--
 include/net/mac80211.h                                | 11 +++++++++--
 net/mac80211/agg-tx.c                                 |  9 ++++++++-
 20 files changed, 38 insertions(+), 34 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_main.c b/drivers/net/wireless/ath/ath9k/htc_drv_main.c
index a82ad739ab80..791f6633667c 100644
--- a/drivers/net/wireless/ath/ath9k/htc_drv_main.c
+++ b/drivers/net/wireless/ath/ath9k/htc_drv_main.c
@@ -1674,7 +1674,7 @@ static int ath9k_htc_ampdu_action(struct ieee80211_hw *hw,
 	case IEEE80211_AMPDU_TX_START:
 		ret = ath9k_htc_tx_aggr_oper(priv, vif, sta, action, tid);
 		if (!ret)
-			ieee80211_start_tx_ba_cb_irqsafe(vif, sta->addr, tid);
+			ret = IEEE80211_AMPDU_TX_START_IMMEDIATE;
 		break;
 	case IEEE80211_AMPDU_TX_STOP_CONT:
 	case IEEE80211_AMPDU_TX_STOP_FLUSH:
diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
index 34121fbf32e3..0548aa3702e3 100644
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
@@ -1921,7 +1921,7 @@ static int ath9k_ampdu_action(struct ieee80211_hw *hw,
 		ath9k_ps_wakeup(sc);
 		ret = ath_tx_aggr_start(sc, sta, tid, ssn);
 		if (!ret)
-			ieee80211_start_tx_ba_cb_irqsafe(vif, sta->addr, tid);
+			ret = IEEE80211_AMPDU_TX_START_IMMEDIATE;
 		ath9k_ps_restore(sc);
 		break;
 	case IEEE80211_AMPDU_TX_STOP_FLUSH:
diff --git a/drivers/net/wireless/ath/carl9170/main.c b/drivers/net/wireless/ath/carl9170/main.c
index 40a8054f8aa6..5914926a5c5b 100644
--- a/drivers/net/wireless/ath/carl9170/main.c
+++ b/drivers/net/wireless/ath/carl9170/main.c
@@ -1449,8 +1449,7 @@ static int carl9170_op_ampdu_action(struct ieee80211_hw *hw,
 		rcu_assign_pointer(sta_info->agg[tid], tid_info);
 		spin_unlock_bh(&ar->tx_ampdu_list_lock);
 
-		ieee80211_start_tx_ba_cb_irqsafe(vif, sta->addr, tid);
-		break;
+		return IEEE80211_AMPDU_TX_START_IMMEDIATE;
 
 	case IEEE80211_AMPDU_TX_STOP_CONT:
 	case IEEE80211_AMPDU_TX_STOP_FLUSH:
diff --git a/drivers/net/wireless/ath/wcn36xx/main.c b/drivers/net/wireless/ath/wcn36xx/main.c
index 79998a3ddb7a..a276dae30887 100644
--- a/drivers/net/wireless/ath/wcn36xx/main.c
+++ b/drivers/net/wireless/ath/wcn36xx/main.c
@@ -1084,6 +1084,7 @@ static int wcn36xx_ampdu_action(struct ieee80211_hw *hw,
 	enum ieee80211_ampdu_mlme_action action = params->action;
 	u16 tid = params->tid;
 	u16 *ssn = &params->ssn;
+	int ret = 0;
 
 	wcn36xx_dbg(WCN36XX_DBG_MAC, "mac ampdu action action %d tid %d\n",
 		    action, tid);
@@ -1106,7 +1107,7 @@ static int wcn36xx_ampdu_action(struct ieee80211_hw *hw,
 		sta_priv->ampdu_state[tid] = WCN36XX_AMPDU_START;
 		spin_unlock_bh(&sta_priv->ampdu_lock);
 
-		ieee80211_start_tx_ba_cb_irqsafe(vif, sta->addr, tid);
+		ret = IEEE80211_AMPDU_TX_START_IMMEDIATE;
 		break;
 	case IEEE80211_AMPDU_TX_OPERATIONAL:
 		spin_lock_bh(&sta_priv->ampdu_lock);
@@ -1131,7 +1132,7 @@ static int wcn36xx_ampdu_action(struct ieee80211_hw *hw,
 
 	mutex_unlock(&wcn->conf_mutex);
 
-	return 0;
+	return ret;
 }
 
 static const struct ieee80211_ops wcn36xx_ops = {
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c
index 6188275b17e5..8e8b685cfe09 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c
@@ -850,8 +850,7 @@ brcms_ops_ampdu_action(struct ieee80211_hw *hw,
 				     "START: tid %d is not agg\'able\n", tid);
 			return -EINVAL;
 		}
-		ieee80211_start_tx_ba_cb_irqsafe(vif, sta->addr, tid);
-		break;
+		return IEEE80211_AMPDU_TX_START_IMMEDIATE;
 
 	case IEEE80211_AMPDU_TX_STOP_CONT:
 	case IEEE80211_AMPDU_TX_STOP_FLUSH:
diff --git a/drivers/net/wireless/intel/iwlegacy/4965-mac.c b/drivers/net/wireless/intel/iwlegacy/4965-mac.c
index ffb705b18fb1..51fdd7ce30af 100644
--- a/drivers/net/wireless/intel/iwlegacy/4965-mac.c
+++ b/drivers/net/wireless/intel/iwlegacy/4965-mac.c
@@ -2265,7 +2265,7 @@ il4965_tx_agg_start(struct il_priv *il, struct ieee80211_vif *vif,
 	if (tid_data->tfds_in_queue == 0) {
 		D_HT("HW queue is empty\n");
 		tid_data->agg.state = IL_AGG_ON;
-		ieee80211_start_tx_ba_cb_irqsafe(vif, sta->addr, tid);
+		ret = IEEE80211_AMPDU_TX_START_IMMEDIATE;
 	} else {
 		D_HT("HW queue is NOT empty: %d packets in HW queue\n",
 		     tid_data->tfds_in_queue);
diff --git a/drivers/net/wireless/intel/iwlwifi/dvm/tx.c b/drivers/net/wireless/intel/iwlwifi/dvm/tx.c
index 3029e3f6de63..cd73fc5cfcbb 100644
--- a/drivers/net/wireless/intel/iwlwifi/dvm/tx.c
+++ b/drivers/net/wireless/intel/iwlwifi/dvm/tx.c
@@ -621,7 +621,7 @@ int iwlagn_tx_agg_start(struct iwl_priv *priv, struct ieee80211_vif *vif,
 		IWL_DEBUG_TX_QUEUES(priv, "Can proceed: ssn = next_recl = %d\n",
 				    tid_data->agg.ssn);
 		tid_data->agg.state = IWL_AGG_STARTING;
-		ieee80211_start_tx_ba_cb_irqsafe(vif, sta->addr, tid);
+		ret = IEEE80211_AMPDU_TX_START_IMMEDIATE;
 	} else {
 		IWL_DEBUG_TX_QUEUES(priv, "Can't proceed: ssn %d, "
 				    "next_reclaimed = %d\n",
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/sta.c b/drivers/net/wireless/intel/iwlwifi/mvm/sta.c
index 0bedba4c61f2..1d6bc62b104c 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/sta.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/sta.c
@@ -2818,13 +2818,12 @@ int iwl_mvm_sta_tx_agg_start(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
 
 	if (normalized_ssn == tid_data->next_reclaimed) {
 		tid_data->state = IWL_AGG_STARTING;
-		ieee80211_start_tx_ba_cb_irqsafe(vif, sta->addr, tid);
+		ret = IEEE80211_AMPDU_TX_START_IMMEDIATE;
 	} else {
 		tid_data->state = IWL_EMPTYING_HW_QUEUE_ADDBA;
+		ret = 0;
 	}
 
-	ret = 0;
-
 out:
 	spin_unlock_bh(&mvmsta->lock);
 
diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c
index 635956024e88..1aeb38296ec3 100644
--- a/drivers/net/wireless/mac80211_hwsim.c
+++ b/drivers/net/wireless/mac80211_hwsim.c
@@ -1979,8 +1979,7 @@ static int mac80211_hwsim_ampdu_action(struct ieee80211_hw *hw,
 
 	switch (action) {
 	case IEEE80211_AMPDU_TX_START:
-		ieee80211_start_tx_ba_cb_irqsafe(vif, sta->addr, tid);
-		break;
+		return IEEE80211_AMPDU_TX_START_IMMEDIATE;
 	case IEEE80211_AMPDU_TX_STOP_CONT:
 	case IEEE80211_AMPDU_TX_STOP_FLUSH:
 	case IEEE80211_AMPDU_TX_STOP_FLUSH_CONT:
diff --git a/drivers/net/wireless/marvell/mwl8k.c b/drivers/net/wireless/marvell/mwl8k.c
index c4db6417748f..d55f229abeea 100644
--- a/drivers/net/wireless/marvell/mwl8k.c
+++ b/drivers/net/wireless/marvell/mwl8k.c
@@ -5520,7 +5520,7 @@ mwl8k_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
 			rc = -EBUSY;
 			break;
 		}
-		ieee80211_start_tx_ba_cb_irqsafe(vif, addr, tid);
+		rc = IEEE80211_AMPDU_TX_START_IMMEDIATE;
 		break;
 	case IEEE80211_AMPDU_TX_STOP_CONT:
 	case IEEE80211_AMPDU_TX_STOP_FLUSH:
diff --git a/drivers/net/wireless/mediatek/mt76/mt7603/main.c b/drivers/net/wireless/mediatek/mt76/mt7603/main.c
index 25d5b1608bc9..4b3217b43a04 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7603/main.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7603/main.c
@@ -582,8 +582,7 @@ mt7603_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
 		break;
 	case IEEE80211_AMPDU_TX_START:
 		mtxq->agg_ssn = IEEE80211_SN_TO_SEQ(ssn);
-		ieee80211_start_tx_ba_cb_irqsafe(vif, sta->addr, tid);
-		break;
+		return IEEE80211_AMPDU_TX_START_IMMEDIATE;
 	case IEEE80211_AMPDU_TX_STOP_CONT:
 		mtxq->aggr = false;
 		mt7603_mac_tx_ba_reset(dev, msta->wcid.idx, tid, -1);
diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/main.c b/drivers/net/wireless/mediatek/mt76/mt7615/main.c
index 87c748715b5d..b6d78212306a 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7615/main.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7615/main.c
@@ -477,8 +477,7 @@ mt7615_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
 		break;
 	case IEEE80211_AMPDU_TX_START:
 		mtxq->agg_ssn = IEEE80211_SN_TO_SEQ(ssn);
-		ieee80211_start_tx_ba_cb_irqsafe(vif, sta->addr, tid);
-		break;
+		return IEEE80211_AMPDU_TX_START_IMMEDIATE;
 	case IEEE80211_AMPDU_TX_STOP_CONT:
 		mtxq->aggr = false;
 		mt7615_mcu_set_tx_ba(dev, params, 0);
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x02_util.c b/drivers/net/wireless/mediatek/mt76/mt76x02_util.c
index aec73a0295e8..414b22399d93 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x02_util.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76x02_util.c
@@ -393,8 +393,7 @@ int mt76x02_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
 		break;
 	case IEEE80211_AMPDU_TX_START:
 		mtxq->agg_ssn = IEEE80211_SN_TO_SEQ(ssn);
-		ieee80211_start_tx_ba_cb_irqsafe(vif, sta->addr, tid);
-		break;
+		return IEEE80211_AMPDU_TX_START_IMMEDIATE;
 	case IEEE80211_AMPDU_TX_STOP_CONT:
 		mtxq->aggr = false;
 		ieee80211_stop_tx_ba_cb_irqsafe(vif, sta->addr, tid);
diff --git a/drivers/net/wireless/mediatek/mt7601u/main.c b/drivers/net/wireless/mediatek/mt7601u/main.c
index 72e608cc53af..671d8897ae76 100644
--- a/drivers/net/wireless/mediatek/mt7601u/main.c
+++ b/drivers/net/wireless/mediatek/mt7601u/main.c
@@ -372,8 +372,7 @@ mt76_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
 		break;
 	case IEEE80211_AMPDU_TX_START:
 		msta->agg_ssn[tid] = ssn << 4;
-		ieee80211_start_tx_ba_cb_irqsafe(vif, sta->addr, tid);
-		break;
+		return IEEE80211_AMPDU_TX_START_IMMEDIATE;
 	case IEEE80211_AMPDU_TX_STOP_CONT:
 		ieee80211_stop_tx_ba_cb_irqsafe(vif, sta->addr, tid);
 		break;
diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
index f1cdcd61c54a..b74e758cce09 100644
--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
@@ -10489,7 +10489,7 @@ int rt2800_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
 		 */
 		break;
 	case IEEE80211_AMPDU_TX_START:
-		ieee80211_start_tx_ba_cb_irqsafe(vif, sta->addr, tid);
+		ret = IEEE80211_AMPDU_TX_START_IMMEDIATE;
 		break;
 	case IEEE80211_AMPDU_TX_STOP_CONT:
 	case IEEE80211_AMPDU_TX_STOP_FLUSH:
diff --git a/drivers/net/wireless/realtek/rtlwifi/base.c b/drivers/net/wireless/realtek/rtlwifi/base.c
index ac746c322554..c75192c4447f 100644
--- a/drivers/net/wireless/realtek/rtlwifi/base.c
+++ b/drivers/net/wireless/realtek/rtlwifi/base.c
@@ -1776,8 +1776,7 @@ int rtl_tx_agg_start(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
 
 	tid_data->agg.agg_state = RTL_AGG_START;
 
-	ieee80211_start_tx_ba_cb_irqsafe(vif, sta->addr, tid);
-	return 0;
+	return IEEE80211_AMPDU_TX_START_IMMEDIATE;
 }
 
 int rtl_tx_agg_stop(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
diff --git a/drivers/net/wireless/realtek/rtw88/mac80211.c b/drivers/net/wireless/realtek/rtw88/mac80211.c
index e5e3605bb693..a203b4705b94 100644
--- a/drivers/net/wireless/realtek/rtw88/mac80211.c
+++ b/drivers/net/wireless/realtek/rtw88/mac80211.c
@@ -437,8 +437,7 @@ static int rtw_ops_ampdu_action(struct ieee80211_hw *hw,
 
 	switch (params->action) {
 	case IEEE80211_AMPDU_TX_START:
-		ieee80211_start_tx_ba_cb_irqsafe(vif, sta->addr, tid);
-		break;
+		return IEEE80211_AMPDU_TX_START_IMMEDIATE;
 	case IEEE80211_AMPDU_TX_STOP_CONT:
 	case IEEE80211_AMPDU_TX_STOP_FLUSH:
 	case IEEE80211_AMPDU_TX_STOP_FLUSH_CONT:
diff --git a/drivers/net/wireless/rsi/rsi_91x_mac80211.c b/drivers/net/wireless/rsi/rsi_91x_mac80211.c
index ce5e92d82efc..9c8ff8190418 100644
--- a/drivers/net/wireless/rsi/rsi_91x_mac80211.c
+++ b/drivers/net/wireless/rsi/rsi_91x_mac80211.c
@@ -1140,8 +1140,7 @@ static int rsi_mac80211_ampdu_action(struct ieee80211_hw *hw,
 		else if ((vif->type == NL80211_IFTYPE_AP) ||
 			 (vif->type == NL80211_IFTYPE_P2P_GO))
 			rsta->seq_start[tid] = seq_no;
-		ieee80211_start_tx_ba_cb_irqsafe(vif, sta->addr, tid);
-		status = 0;
+		status = IEEE80211_AMPDU_TX_START_IMMEDIATE
 		break;
 
 	case IEEE80211_AMPDU_TX_STOP_CONT:
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index 523c6a09e1c8..d69081c38788 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -3095,7 +3095,9 @@ enum ieee80211_filter_flags {
  *
  * @IEEE80211_AMPDU_RX_START: start RX aggregation
  * @IEEE80211_AMPDU_RX_STOP: stop RX aggregation
- * @IEEE80211_AMPDU_TX_START: start TX aggregation
+ * @IEEE80211_AMPDU_TX_START: start TX aggregation, the driver must either
+ *	call ieee80211_start_tx_ba_cb_irqsafe() or return the special
+ *	status %IEEE80211_AMPDU_TX_START_IMMEDIATE.
  * @IEEE80211_AMPDU_TX_OPERATIONAL: TX aggregation has become operational
  * @IEEE80211_AMPDU_TX_STOP_CONT: stop TX aggregation but continue transmitting
  *	queued packets, now unaggregated. After all packets are transmitted the
@@ -3119,6 +3121,8 @@ enum ieee80211_ampdu_mlme_action {
 	IEEE80211_AMPDU_TX_OPERATIONAL,
 };
 
+#define IEEE80211_AMPDU_TX_START_IMMEDIATE 1
+
 /**
  * struct ieee80211_ampdu_params - AMPDU action parameters
  *
@@ -3896,7 +3900,10 @@ struct ieee80211_ops {
 	 *
 	 * Even ``189`` would be wrong since 1 could be lost again.
 	 *
-	 * Returns a negative error code on failure.
+	 * Returns a negative error code on failure. The driver may return
+	 * %IEEE80211_AMPDU_TX_START_IMMEDIATE for %IEEE80211_AMPDU_TX_START
+	 * if the session can start immediately.
+	 *
 	 * The callback can sleep.
 	 */
 	int (*ampdu_action)(struct ieee80211_hw *hw,
diff --git a/net/mac80211/agg-tx.c b/net/mac80211/agg-tx.c
index b11883d26875..33da6f738c99 100644
--- a/net/mac80211/agg-tx.c
+++ b/net/mac80211/agg-tx.c
@@ -485,7 +485,14 @@ void ieee80211_tx_ba_session_handle_start(struct sta_info *sta, int tid)
 
 	params.ssn = sta->tid_seq[tid] >> 4;
 	ret = drv_ampdu_action(local, sdata, &params);
-	if (ret) {
+	if (ret == IEEE80211_AMPDU_TX_START_IMMEDIATE) {
+		/*
+		 * We didn't send the request yet, so don't need to check
+		 * here if we already got a response, just mark as driver
+		 * ready immediately.
+		 */
+		set_bit(HT_AGG_STATE_DRV_READY, &tid_tx->state);
+	} else if (ret) {
 		ht_dbg(sdata,
 		       "BA request denied - HW unavailable for %pM tid %d\n",
 		       sta->sta.addr, tid);
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] mac80211: simplify TX aggregation start
  2019-10-01 20:06 [PATCH] mac80211: simplify TX aggregation start Johannes Berg
@ 2019-10-02  4:25 ` kbuild test robot
  2019-10-02  9:08 ` Stanislaw Gruszka
  1 sibling, 0 replies; 4+ messages in thread
From: kbuild test robot @ 2019-10-02  4:25 UTC (permalink / raw)
  To: Johannes Berg; +Cc: kbuild-all, linux-wireless, Johannes Berg

[-- Attachment #1: Type: text/plain, Size: 12047 bytes --]

Hi Johannes,

I love your patch! Yet something to improve:

[auto build test ERROR on wireless-drivers-next/master]
[cannot apply to v5.4-rc1 next-20191001]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]

url:    https://github.com/0day-ci/linux/commits/Johannes-Berg/mac80211-simplify-TX-aggregation-start/20191002-113555
base:   https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers-next.git master
config: sparc64-allmodconfig (attached as .config)
compiler: sparc64-linux-gcc (GCC) 7.4.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        GCC_VERSION=7.4.0 make.cross ARCH=sparc64 

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>

All error/warnings (new ones prefixed by >>):

   drivers/net/wireless/rsi/rsi_91x_mac80211.c: In function 'rsi_mac80211_ampdu_action':
>> drivers/net/wireless/rsi/rsi_91x_mac80211.c:1144:3: error: expected ';' before 'break'
      break;
      ^~~~~
>> drivers/net/wireless/rsi/rsi_91x_mac80211.c:1143:10: warning: this statement may fall through [-Wimplicit-fallthrough=]
      status = IEEE80211_AMPDU_TX_START_IMMEDIATE
   drivers/net/wireless/rsi/rsi_91x_mac80211.c:1146:2: note: here
     case IEEE80211_AMPDU_TX_STOP_CONT:
     ^~~~

vim +1144 drivers/net/wireless/rsi/rsi_91x_mac80211.c

dad0d04fa7ba41 Fariya Fatima           2014-03-16  1064  
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1065  /**
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1066   * rsi_mac80211_ampdu_action() - This function selects the AMPDU action for
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1067   *				 the corresponding mlme_action flag and
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1068   *				 informs the f/w regarding this.
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1069   * @hw: Pointer to the ieee80211_hw structure.
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1070   * @vif: Pointer to the ieee80211_vif structure.
50ea05efaf3bed Sara Sharon             2015-12-30  1071   * @params: Pointer to A-MPDU action parameters
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1072   *
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1073   * Return: status: 0 on success, negative error code on failure.
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1074   */
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1075  static int rsi_mac80211_ampdu_action(struct ieee80211_hw *hw,
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1076  				     struct ieee80211_vif *vif,
50ea05efaf3bed Sara Sharon             2015-12-30  1077  				     struct ieee80211_ampdu_params *params)
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1078  {
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1079  	int status = -EOPNOTSUPP;
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1080  	struct rsi_hw *adapter = hw->priv;
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1081  	struct rsi_common *common = adapter->priv;
32be57a666a51c Prameela Rani Garnepudi 2017-08-16  1082  	struct rsi_sta *rsta = NULL;
32be57a666a51c Prameela Rani Garnepudi 2017-08-16  1083  	u16 seq_no = 0, seq_start = 0;
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1084  	u8 ii = 0;
50ea05efaf3bed Sara Sharon             2015-12-30  1085  	struct ieee80211_sta *sta = params->sta;
32be57a666a51c Prameela Rani Garnepudi 2017-08-16  1086  	u8 sta_id = 0;
50ea05efaf3bed Sara Sharon             2015-12-30  1087  	enum ieee80211_ampdu_mlme_action action = params->action;
50ea05efaf3bed Sara Sharon             2015-12-30  1088  	u16 tid = params->tid;
50ea05efaf3bed Sara Sharon             2015-12-30  1089  	u16 *ssn = &params->ssn;
50ea05efaf3bed Sara Sharon             2015-12-30  1090  	u8 buf_size = params->buf_size;
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1091  
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1092  	for (ii = 0; ii < RSI_MAX_VIFS; ii++) {
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1093  		if (vif == adapter->vifs[ii])
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1094  			break;
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1095  	}
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1096  
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1097  	mutex_lock(&common->mutex);
32be57a666a51c Prameela Rani Garnepudi 2017-08-16  1098  
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1099  	if (ssn != NULL)
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1100  		seq_no = *ssn;
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1101  
c7245c0975f134 Prameela Rani Garnepudi 2017-08-30  1102  	if ((vif->type == NL80211_IFTYPE_AP) ||
c7245c0975f134 Prameela Rani Garnepudi 2017-08-30  1103  	    (vif->type == NL80211_IFTYPE_P2P_GO)) {
32be57a666a51c Prameela Rani Garnepudi 2017-08-16  1104  		rsta = rsi_find_sta(common, sta->addr);
32be57a666a51c Prameela Rani Garnepudi 2017-08-16  1105  		if (!rsta) {
32be57a666a51c Prameela Rani Garnepudi 2017-08-16  1106  			rsi_dbg(ERR_ZONE, "No station mapped\n");
0270639e899e21 Dan Carpenter           2017-08-25  1107  			status = 0;
0270639e899e21 Dan Carpenter           2017-08-25  1108  			goto unlock;
32be57a666a51c Prameela Rani Garnepudi 2017-08-16  1109  		}
32be57a666a51c Prameela Rani Garnepudi 2017-08-16  1110  		sta_id = rsta->sta_id;
32be57a666a51c Prameela Rani Garnepudi 2017-08-16  1111  	}
32be57a666a51c Prameela Rani Garnepudi 2017-08-16  1112  
32be57a666a51c Prameela Rani Garnepudi 2017-08-16  1113  	rsi_dbg(INFO_ZONE,
32be57a666a51c Prameela Rani Garnepudi 2017-08-16  1114  		"%s: AMPDU action tid=%d ssn=0x%x, buf_size=%d sta_id=%d\n",
32be57a666a51c Prameela Rani Garnepudi 2017-08-16  1115  		__func__, tid, seq_no, buf_size, sta_id);
32be57a666a51c Prameela Rani Garnepudi 2017-08-16  1116  
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1117  	switch (action) {
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1118  	case IEEE80211_AMPDU_RX_START:
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1119  		status = rsi_send_aggregation_params_frame(common,
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1120  							   tid,
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1121  							   seq_no,
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1122  							   buf_size,
32be57a666a51c Prameela Rani Garnepudi 2017-08-16  1123  							   STA_RX_ADDBA_DONE,
32be57a666a51c Prameela Rani Garnepudi 2017-08-16  1124  							   sta_id);
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1125  		break;
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1126  
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1127  	case IEEE80211_AMPDU_RX_STOP:
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1128  		status = rsi_send_aggregation_params_frame(common,
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1129  							   tid,
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1130  							   0,
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1131  							   buf_size,
32be57a666a51c Prameela Rani Garnepudi 2017-08-16  1132  							   STA_RX_DELBA,
32be57a666a51c Prameela Rani Garnepudi 2017-08-16  1133  							   sta_id);
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1134  		break;
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1135  
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1136  	case IEEE80211_AMPDU_TX_START:
c7245c0975f134 Prameela Rani Garnepudi 2017-08-30  1137  		if ((vif->type == NL80211_IFTYPE_STATION) ||
c7245c0975f134 Prameela Rani Garnepudi 2017-08-30  1138  		    (vif->type == NL80211_IFTYPE_P2P_CLIENT))
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1139  			common->vif_info[ii].seq_start = seq_no;
c7245c0975f134 Prameela Rani Garnepudi 2017-08-30  1140  		else if ((vif->type == NL80211_IFTYPE_AP) ||
c7245c0975f134 Prameela Rani Garnepudi 2017-08-30  1141  			 (vif->type == NL80211_IFTYPE_P2P_GO))
32be57a666a51c Prameela Rani Garnepudi 2017-08-16  1142  			rsta->seq_start[tid] = seq_no;
bec07d6ec29366 Johannes Berg           2019-10-01 @1143  		status = IEEE80211_AMPDU_TX_START_IMMEDIATE
dad0d04fa7ba41 Fariya Fatima           2014-03-16 @1144  		break;
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1145  
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1146  	case IEEE80211_AMPDU_TX_STOP_CONT:
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1147  	case IEEE80211_AMPDU_TX_STOP_FLUSH:
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1148  	case IEEE80211_AMPDU_TX_STOP_FLUSH_CONT:
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1149  		status = rsi_send_aggregation_params_frame(common,
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1150  							   tid,
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1151  							   seq_no,
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1152  							   buf_size,
32be57a666a51c Prameela Rani Garnepudi 2017-08-16  1153  							   STA_TX_DELBA,
32be57a666a51c Prameela Rani Garnepudi 2017-08-16  1154  							   sta_id);
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1155  		if (!status)
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1156  			ieee80211_stop_tx_ba_cb_irqsafe(vif, sta->addr, tid);
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1157  		break;
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1158  
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1159  	case IEEE80211_AMPDU_TX_OPERATIONAL:
c7245c0975f134 Prameela Rani Garnepudi 2017-08-30  1160  		if ((vif->type == NL80211_IFTYPE_STATION) ||
c7245c0975f134 Prameela Rani Garnepudi 2017-08-30  1161  		    (vif->type == NL80211_IFTYPE_P2P_CLIENT))
32be57a666a51c Prameela Rani Garnepudi 2017-08-16  1162  			seq_start = common->vif_info[ii].seq_start;
c7245c0975f134 Prameela Rani Garnepudi 2017-08-30  1163  		else if ((vif->type == NL80211_IFTYPE_AP) ||
c7245c0975f134 Prameela Rani Garnepudi 2017-08-30  1164  			 (vif->type == NL80211_IFTYPE_P2P_GO))
32be57a666a51c Prameela Rani Garnepudi 2017-08-16  1165  			seq_start = rsta->seq_start[tid];
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1166  		status = rsi_send_aggregation_params_frame(common,
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1167  							   tid,
32be57a666a51c Prameela Rani Garnepudi 2017-08-16  1168  							   seq_start,
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1169  							   buf_size,
32be57a666a51c Prameela Rani Garnepudi 2017-08-16  1170  							   STA_TX_ADDBA_DONE,
32be57a666a51c Prameela Rani Garnepudi 2017-08-16  1171  							   sta_id);
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1172  		break;
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1173  
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1174  	default:
a53e8f3edaa0f2 Colin Ian King          2018-05-26  1175  		rsi_dbg(ERR_ZONE, "%s: Unknown AMPDU action\n", __func__);
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1176  		break;
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1177  	}
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1178  
0270639e899e21 Dan Carpenter           2017-08-25  1179  unlock:
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1180  	mutex_unlock(&common->mutex);
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1181  	return status;
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1182  }
dad0d04fa7ba41 Fariya Fatima           2014-03-16  1183  

:::::: The code at line 1144 was first introduced by commit
:::::: dad0d04fa7ba41ce603a01e8e64967650303e9a2 rsi: Add RS9113 wireless driver

:::::: TO: Fariya Fatima <fariyaf@gmail.com>
:::::: CC: John W. Linville <linville@tuxdriver.com>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 59095 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] mac80211: simplify TX aggregation start
  2019-10-01 20:06 [PATCH] mac80211: simplify TX aggregation start Johannes Berg
  2019-10-02  4:25 ` kbuild test robot
@ 2019-10-02  9:08 ` Stanislaw Gruszka
  2019-10-02  9:09   ` Johannes Berg
  1 sibling, 1 reply; 4+ messages in thread
From: Stanislaw Gruszka @ 2019-10-02  9:08 UTC (permalink / raw)
  To: Johannes Berg; +Cc: linux-wireless, Johannes Berg

On Tue, Oct 01, 2019 at 10:06:29PM +0200, Johannes Berg wrote:
> index f1cdcd61c54a..b74e758cce09 100644
> --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
> +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
> @@ -10489,7 +10489,7 @@ int rt2800_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
>  		 */
>  		break;
>  	case IEEE80211_AMPDU_TX_START:
> -		ieee80211_start_tx_ba_cb_irqsafe(vif, sta->addr, tid);
> +		ret = IEEE80211_AMPDU_TX_START_IMMEDIATE;
>  		break;
>  	case IEEE80211_AMPDU_TX_STOP_CONT:
>  	case IEEE80211_AMPDU_TX_STOP_FLUSH:
<snip>
> +#define IEEE80211_AMPDU_TX_START_IMMEDIATE 1
> +
>  /**

On rt2x00 we already return 1 for case we do not have free HW WCID
number for a remote station.

        if (sta_priv->wcid > WCID_END)
                return 1;

So we should change that to some other error code i.e. -ENOSPC.

Stanislaw

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] mac80211: simplify TX aggregation start
  2019-10-02  9:08 ` Stanislaw Gruszka
@ 2019-10-02  9:09   ` Johannes Berg
  0 siblings, 0 replies; 4+ messages in thread
From: Johannes Berg @ 2019-10-02  9:09 UTC (permalink / raw)
  To: Stanislaw Gruszka; +Cc: linux-wireless

On Wed, 2019-10-02 at 11:08 +0200, Stanislaw Gruszka wrote:
> On Tue, Oct 01, 2019 at 10:06:29PM +0200, Johannes Berg wrote:
> > index f1cdcd61c54a..b74e758cce09 100644
> > --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
> > +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
> > @@ -10489,7 +10489,7 @@ int rt2800_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
> >  		 */
> >  		break;
> >  	case IEEE80211_AMPDU_TX_START:
> > -		ieee80211_start_tx_ba_cb_irqsafe(vif, sta->addr, tid);
> > +		ret = IEEE80211_AMPDU_TX_START_IMMEDIATE;
> >  		break;
> >  	case IEEE80211_AMPDU_TX_STOP_CONT:
> >  	case IEEE80211_AMPDU_TX_STOP_FLUSH:
> <snip>
> > +#define IEEE80211_AMPDU_TX_START_IMMEDIATE 1
> > +
> >  /**
> 
> On rt2x00 we already return 1 for case we do not have free HW WCID
> number for a remote station.
> 
>         if (sta_priv->wcid > WCID_END)
>                 return 1;
> 
> So we should change that to some other error code i.e. -ENOSPC.

Hah, umm... that's kinda weird, but ok :)

johannes


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2019-10-02  9:09 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-01 20:06 [PATCH] mac80211: simplify TX aggregation start Johannes Berg
2019-10-02  4:25 ` kbuild test robot
2019-10-02  9:08 ` Stanislaw Gruszka
2019-10-02  9:09   ` Johannes Berg

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).