diff options
| author | Jakub Kicinski <kuba@kernel.org> | 2024-02-27 19:19:16 -0800 | 
|---|---|---|
| committer | Jakub Kicinski <kuba@kernel.org> | 2024-02-27 19:19:16 -0800 | 
| commit | ed2c0e4cb6938467174faef07fbba75c47cf69b8 (patch) | |
| tree | aa25bb3b76af1b3abe499744de40a83a52ec9dca | |
| parent | 6a2008641920a9c6fe1abbeb9acbec463215d505 (diff) | |
| parent | 413dafc8170fcb925fb17af8842f06af305f8e0b (diff) | |
Merge tag 'wireless-2024-02-27' of git://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless
Kalle Valo says:
====================
wireless fixes for v6.8-rc7
Few remaining fixes, hopefully the last wireless pull request to v6.8.
Two fixes to the stack and two to iwlwifi but no high priority fixes
this time.
* tag 'wireless-2024-02-27' of git://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless:
  wifi: mac80211: only call drv_sta_rc_update for uploaded stations
  MAINTAINERS: wifi: Add N: ath1*k entries to match .yaml files
  MAINTAINERS: wifi: update Jeff Johnson e-mail address
  wifi: iwlwifi: mvm: fix the TXF mapping for BZ devices
  wifi: iwlwifi: mvm: ensure offloading TID queue exists
  wifi: nl80211: reject iftype change with mesh ID change
====================
Link: https://lore.kernel.org/r/20240227135751.C5EC6C43390@smtp.kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
| -rw-r--r-- | MAINTAINERS | 11 | ||||
| -rw-r--r-- | drivers/net/wireless/intel/iwlwifi/fw/api/txq.h | 12 | ||||
| -rw-r--r-- | drivers/net/wireless/intel/iwlwifi/mvm/d3.c | 9 | ||||
| -rw-r--r-- | drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c | 11 | ||||
| -rw-r--r-- | drivers/net/wireless/intel/iwlwifi/mvm/mvm.h | 8 | ||||
| -rw-r--r-- | drivers/net/wireless/intel/iwlwifi/mvm/sta.c | 28 | ||||
| -rw-r--r-- | drivers/net/wireless/intel/iwlwifi/mvm/sta.h | 3 | ||||
| -rw-r--r-- | net/mac80211/rate.c | 3 | ||||
| -rw-r--r-- | net/wireless/nl80211.c | 2 | 
9 files changed, 76 insertions, 11 deletions
| diff --git a/MAINTAINERS b/MAINTAINERS index bf77be03fb2b..da1c1f4aeda8 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -17984,33 +17984,34 @@ F:	drivers/media/tuners/qt1010*  QUALCOMM ATH12K WIRELESS DRIVER  M:	Kalle Valo <kvalo@kernel.org> -M:	Jeff Johnson <quic_jjohnson@quicinc.com> +M:	Jeff Johnson <jjohnson@kernel.org>  L:	ath12k@lists.infradead.org  S:	Supported  W:	https://wireless.wiki.kernel.org/en/users/Drivers/ath12k  T:	git git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git  F:	drivers/net/wireless/ath/ath12k/ +N:	ath12k  QUALCOMM ATHEROS ATH10K WIRELESS DRIVER  M:	Kalle Valo <kvalo@kernel.org> -M:	Jeff Johnson <quic_jjohnson@quicinc.com> +M:	Jeff Johnson <jjohnson@kernel.org>  L:	ath10k@lists.infradead.org  S:	Supported  W:	https://wireless.wiki.kernel.org/en/users/Drivers/ath10k  T:	git git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git -F:	Documentation/devicetree/bindings/net/wireless/qcom,ath10k.yaml  F:	drivers/net/wireless/ath/ath10k/ +N:	ath10k  QUALCOMM ATHEROS ATH11K WIRELESS DRIVER  M:	Kalle Valo <kvalo@kernel.org> -M:	Jeff Johnson <quic_jjohnson@quicinc.com> +M:	Jeff Johnson <jjohnson@kernel.org>  L:	ath11k@lists.infradead.org  S:	Supported  W:	https://wireless.wiki.kernel.org/en/users/Drivers/ath11k  B:	https://wireless.wiki.kernel.org/en/users/Drivers/ath11k/bugreport  T:	git git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git -F:	Documentation/devicetree/bindings/net/wireless/qcom,ath11k.yaml  F:	drivers/net/wireless/ath/ath11k/ +N:	ath11k  QUALCOMM ATHEROS ATH9K WIRELESS DRIVER  M:	Toke Høiland-Jørgensen <toke@toke.dk> diff --git a/drivers/net/wireless/intel/iwlwifi/fw/api/txq.h b/drivers/net/wireless/intel/iwlwifi/fw/api/txq.h index 9c69d3674384..e6c0f928a6bb 100644 --- a/drivers/net/wireless/intel/iwlwifi/fw/api/txq.h +++ b/drivers/net/wireless/intel/iwlwifi/fw/api/txq.h @@ -1,6 +1,6 @@  /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */  /* - * Copyright (C) 2005-2014, 2019-2021, 2023 Intel Corporation + * Copyright (C) 2005-2014, 2019-2021, 2023-2024 Intel Corporation   * Copyright (C) 2013-2015 Intel Mobile Communications GmbH   * Copyright (C) 2016-2017 Intel Deutschland GmbH   */ @@ -66,6 +66,16 @@ enum iwl_gen2_tx_fifo {  	IWL_GEN2_TRIG_TX_FIFO_VO,  }; +enum iwl_bz_tx_fifo { +	IWL_BZ_EDCA_TX_FIFO_BK, +	IWL_BZ_EDCA_TX_FIFO_BE, +	IWL_BZ_EDCA_TX_FIFO_VI, +	IWL_BZ_EDCA_TX_FIFO_VO, +	IWL_BZ_TRIG_TX_FIFO_BK, +	IWL_BZ_TRIG_TX_FIFO_BE, +	IWL_BZ_TRIG_TX_FIFO_VI, +	IWL_BZ_TRIG_TX_FIFO_VO, +};  /**   * enum iwl_tx_queue_cfg_actions - TXQ config options   * @TX_QUEUE_CFG_ENABLE_QUEUE: enable a queue diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/d3.c b/drivers/net/wireless/intel/iwlwifi/mvm/d3.c index 4582afb149d7..05b64176859e 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/d3.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/d3.c @@ -1279,7 +1279,9 @@ static int __iwl_mvm_suspend(struct ieee80211_hw *hw,  		mvm->net_detect = true;  	} else { -		struct iwl_wowlan_config_cmd wowlan_config_cmd = {}; +		struct iwl_wowlan_config_cmd wowlan_config_cmd = { +			.offloading_tid = 0, +		};  		wowlan_config_cmd.sta_id = mvmvif->deflink.ap_sta_id; @@ -1291,6 +1293,11 @@ static int __iwl_mvm_suspend(struct ieee80211_hw *hw,  			goto out_noreset;  		} +		ret = iwl_mvm_sta_ensure_queue( +			mvm, ap_sta->txq[wowlan_config_cmd.offloading_tid]); +		if (ret) +			goto out_noreset; +  		ret = iwl_mvm_get_wowlan_config(mvm, wowlan, &wowlan_config_cmd,  						vif, mvmvif, ap_sta);  		if (ret) diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c b/drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c index c4f96125cf33..25a5a31e63c2 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c @@ -31,6 +31,17 @@ const u8 iwl_mvm_ac_to_gen2_tx_fifo[] = {  	IWL_GEN2_TRIG_TX_FIFO_BK,  }; +const u8 iwl_mvm_ac_to_bz_tx_fifo[] = { +	IWL_BZ_EDCA_TX_FIFO_VO, +	IWL_BZ_EDCA_TX_FIFO_VI, +	IWL_BZ_EDCA_TX_FIFO_BE, +	IWL_BZ_EDCA_TX_FIFO_BK, +	IWL_BZ_TRIG_TX_FIFO_VO, +	IWL_BZ_TRIG_TX_FIFO_VI, +	IWL_BZ_TRIG_TX_FIFO_BE, +	IWL_BZ_TRIG_TX_FIFO_BK, +}; +  struct iwl_mvm_mac_iface_iterator_data {  	struct iwl_mvm *mvm;  	struct ieee80211_vif *vif; diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h b/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h index 40627961b834..81dbef6947f5 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h +++ b/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h @@ -1581,12 +1581,16 @@ static inline int iwl_mvm_max_active_links(struct iwl_mvm *mvm,  extern const u8 iwl_mvm_ac_to_tx_fifo[];  extern const u8 iwl_mvm_ac_to_gen2_tx_fifo[]; +extern const u8 iwl_mvm_ac_to_bz_tx_fifo[];  static inline u8 iwl_mvm_mac_ac_to_tx_fifo(struct iwl_mvm *mvm,  					   enum ieee80211_ac_numbers ac)  { -	return iwl_mvm_has_new_tx_api(mvm) ? -		iwl_mvm_ac_to_gen2_tx_fifo[ac] : iwl_mvm_ac_to_tx_fifo[ac]; +	if (mvm->trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_BZ) +		return iwl_mvm_ac_to_bz_tx_fifo[ac]; +	if (iwl_mvm_has_new_tx_api(mvm)) +		return iwl_mvm_ac_to_gen2_tx_fifo[ac]; +	return iwl_mvm_ac_to_tx_fifo[ac];  }  struct iwl_rate_info { diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/sta.c b/drivers/net/wireless/intel/iwlwifi/mvm/sta.c index 2a3ca9785974..c2e0cff740e9 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/sta.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/sta.c @@ -1502,6 +1502,34 @@ out_err:  	return ret;  } +int iwl_mvm_sta_ensure_queue(struct iwl_mvm *mvm, +			     struct ieee80211_txq *txq) +{ +	struct iwl_mvm_txq *mvmtxq = iwl_mvm_txq_from_mac80211(txq); +	int ret = -EINVAL; + +	lockdep_assert_held(&mvm->mutex); + +	if (likely(test_bit(IWL_MVM_TXQ_STATE_READY, &mvmtxq->state)) || +	    !txq->sta) { +		return 0; +	} + +	if (!iwl_mvm_sta_alloc_queue(mvm, txq->sta, txq->ac, txq->tid)) { +		set_bit(IWL_MVM_TXQ_STATE_READY, &mvmtxq->state); +		ret = 0; +	} + +	local_bh_disable(); +	spin_lock(&mvm->add_stream_lock); +	if (!list_empty(&mvmtxq->list)) +		list_del_init(&mvmtxq->list); +	spin_unlock(&mvm->add_stream_lock); +	local_bh_enable(); + +	return ret; +} +  void iwl_mvm_add_new_dqa_stream_wk(struct work_struct *wk)  {  	struct iwl_mvm *mvm = container_of(wk, struct iwl_mvm, diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/sta.h b/drivers/net/wireless/intel/iwlwifi/mvm/sta.h index b33a0ce096d4..3cf8a70274ce 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/sta.h +++ b/drivers/net/wireless/intel/iwlwifi/mvm/sta.h @@ -1,6 +1,6 @@  /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */  /* - * Copyright (C) 2012-2014, 2018-2023 Intel Corporation + * Copyright (C) 2012-2014, 2018-2024 Intel Corporation   * Copyright (C) 2013-2014 Intel Mobile Communications GmbH   * Copyright (C) 2015-2016 Intel Deutschland GmbH   */ @@ -571,6 +571,7 @@ void iwl_mvm_modify_all_sta_disable_tx(struct iwl_mvm *mvm,  				       bool disable);  void iwl_mvm_csa_client_absent(struct iwl_mvm *mvm, struct ieee80211_vif *vif); +int iwl_mvm_sta_ensure_queue(struct iwl_mvm *mvm, struct ieee80211_txq *txq);  void iwl_mvm_add_new_dqa_stream_wk(struct work_struct *wk);  int iwl_mvm_add_pasn_sta(struct iwl_mvm *mvm, struct ieee80211_vif *vif,  			 struct iwl_mvm_int_sta *sta, u8 *addr, u32 cipher, diff --git a/net/mac80211/rate.c b/net/mac80211/rate.c index d5ea5f5bcf3a..9d33fd2377c8 100644 --- a/net/mac80211/rate.c +++ b/net/mac80211/rate.c @@ -119,7 +119,8 @@ void rate_control_rate_update(struct ieee80211_local *local,  		rcu_read_unlock();  	} -	drv_sta_rc_update(local, sta->sdata, &sta->sta, changed); +	if (sta->uploaded) +		drv_sta_rc_update(local, sta->sdata, &sta->sta, changed);  }  int ieee80211_rate_control_register(const struct rate_control_ops *ops) diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index b09700400d09..bd54a928bab4 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c @@ -4197,6 +4197,8 @@ static int nl80211_set_interface(struct sk_buff *skb, struct genl_info *info)  		if (ntype != NL80211_IFTYPE_MESH_POINT)  			return -EINVAL; +		if (otype != NL80211_IFTYPE_MESH_POINT) +			return -EINVAL;  		if (netif_running(dev))  			return -EBUSY; | 
