pstore-platform-add-check-for-kstrdup.patch
genirq-matrix-exclude-managed-interrupts-in-irq_matr.patch
i40e-fix-potential-memory-leaks-in-i40e_remove.patch
-wifi-iwlwifi-use-fw-rate-for-non-data-frames.patch
udp-add-missing-write_once-around-up-encap_rcv.patch
tcp-call-tcp_try_undo_recovery-when-an-rtod-tfo-syna.patch
overflow-implement-size_t-saturating-arithmetic-help.patch
+++ /dev/null
-From 3c2f389e124ad826a72bed5008916b62f5d86108 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Wed, 13 Sep 2023 14:56:45 +0300
-Subject: wifi: iwlwifi: Use FW rate for non-data frames
-
-From: Miri Korenblit <miriam.rachel.korenblit@intel.com>
-
-[ Upstream commit 499d02790495958506a64f37ceda7e97345a50a8 ]
-
-Currently we are setting the rate in the tx cmd for
-mgmt frames (e.g. during connection establishment).
-This was problematic when sending mgmt frames in eSR mode,
-as we don't know what link this frame will be sent on
-(This is decided by the FW), so we don't know what is the
-lowest rate.
-Fix this by not setting the rate in tx cmd and rely
-on FW to choose the right one.
-Set rate only for injected frames with fixed rate,
-or when no sta is given.
-Also set for important frames (EAPOL etc.) the High Priority flag.
-
-Fixes: 055b22e770dd ("iwlwifi: mvm: Set Tx rate and flags when there is not station")
-Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
-Signed-off-by: Gregory Greenman <gregory.greenman@intel.com>
-Link: https://lore.kernel.org/r/20230913145231.6c7e59620ee0.I6eaed3ccdd6dd62b9e664facc484081fc5275843@changeid
-Signed-off-by: Johannes Berg <johannes.berg@intel.com>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/net/wireless/intel/iwlwifi/mvm/tx.c | 14 +++++++++-----
- 1 file changed, 9 insertions(+), 5 deletions(-)
-
-diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
-index d310337b16251..99150fec151b8 100644
---- a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
-+++ b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
-@@ -532,16 +532,20 @@ iwl_mvm_set_tx_params(struct iwl_mvm *mvm, struct sk_buff *skb,
- flags |= IWL_TX_FLAGS_ENCRYPT_DIS;
-
- /*
-- * For data packets rate info comes from the fw. Only
-- * set rate/antenna during connection establishment or in case
-- * no station is given.
-+ * For data and mgmt packets rate info comes from the fw. Only
-+ * set rate/antenna for injected frames with fixed rate, or
-+ * when no sta is given.
- */
-- if (!sta || !ieee80211_is_data(hdr->frame_control) ||
-- mvmsta->sta_state < IEEE80211_STA_AUTHORIZED) {
-+ if (unlikely(!sta ||
-+ info->control.flags & IEEE80211_TX_CTRL_RATE_INJECT)) {
- flags |= IWL_TX_FLAGS_CMD_RATE;
- rate_n_flags =
- iwl_mvm_get_tx_rate_n_flags(mvm, info, sta,
- hdr->frame_control);
-+ } else if (!ieee80211_is_data(hdr->frame_control) ||
-+ mvmsta->sta_state < IEEE80211_STA_AUTHORIZED) {
-+ /* These are important frames */
-+ flags |= IWL_TX_FLAGS_HIGH_PRI;
- }
-
- if (mvm->trans->trans_cfg->device_family >=
---
-2.42.0
-
i40e-fix-potential-memory-leaks-in-i40e_remove.patch
selftests-bpf-test-tail-call-counting-with-bpf2bpf-a.patch
selftests-bpf-correct-map_fd-to-data_fd-in-tailcalls.patch
-wifi-iwlwifi-use-fw-rate-for-non-data-frames.patch
udp-add-missing-write_once-around-up-encap_rcv.patch
tcp-call-tcp_try_undo_recovery-when-an-rtod-tfo-syna.patch
gve-use-size_add-in-call-to-struct_size.patch
static inline void iwl_trans_set_q_ptrs(struct iwl_trans *trans, int queue,
--- a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
-@@ -1436,7 +1436,7 @@ static void iwl_mvm_rx_tx_cmd_single(str
+@@ -1432,7 +1432,7 @@ static void iwl_mvm_rx_tx_cmd_single(str
seq_ctl = le16_to_cpu(tx_resp->seq_ctl);
/* we can free until ssn % q.n_bd not inclusive */
while (!skb_queue_empty(&skbs)) {
struct sk_buff *skb = __skb_dequeue(&skbs);
-@@ -1781,7 +1781,7 @@ static void iwl_mvm_tx_reclaim(struct iw
+@@ -1777,7 +1777,7 @@ static void iwl_mvm_tx_reclaim(struct iw
* block-ack window (we assume that they've been successfully
* transmitted ... if not, it's too late anyway).
*/
+++ /dev/null
-From e6fd3bc394c77358025424a510f61d5c0184e39b Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Wed, 13 Sep 2023 14:56:45 +0300
-Subject: wifi: iwlwifi: Use FW rate for non-data frames
-
-From: Miri Korenblit <miriam.rachel.korenblit@intel.com>
-
-[ Upstream commit 499d02790495958506a64f37ceda7e97345a50a8 ]
-
-Currently we are setting the rate in the tx cmd for
-mgmt frames (e.g. during connection establishment).
-This was problematic when sending mgmt frames in eSR mode,
-as we don't know what link this frame will be sent on
-(This is decided by the FW), so we don't know what is the
-lowest rate.
-Fix this by not setting the rate in tx cmd and rely
-on FW to choose the right one.
-Set rate only for injected frames with fixed rate,
-or when no sta is given.
-Also set for important frames (EAPOL etc.) the High Priority flag.
-
-Fixes: 055b22e770dd ("iwlwifi: mvm: Set Tx rate and flags when there is not station")
-Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
-Signed-off-by: Gregory Greenman <gregory.greenman@intel.com>
-Link: https://lore.kernel.org/r/20230913145231.6c7e59620ee0.I6eaed3ccdd6dd62b9e664facc484081fc5275843@changeid
-Signed-off-by: Johannes Berg <johannes.berg@intel.com>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/net/wireless/intel/iwlwifi/mvm/tx.c | 14 +++++++++-----
- 1 file changed, 9 insertions(+), 5 deletions(-)
-
-diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
-index b127e0b527ce0..5304edd351db2 100644
---- a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
-+++ b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
-@@ -479,16 +479,20 @@ iwl_mvm_set_tx_params(struct iwl_mvm *mvm, struct sk_buff *skb,
- flags |= IWL_TX_FLAGS_ENCRYPT_DIS;
-
- /*
-- * For data packets rate info comes from the fw. Only
-- * set rate/antenna during connection establishment or in case
-- * no station is given.
-+ * For data and mgmt packets rate info comes from the fw. Only
-+ * set rate/antenna for injected frames with fixed rate, or
-+ * when no sta is given.
- */
-- if (!sta || !ieee80211_is_data(hdr->frame_control) ||
-- mvmsta->sta_state < IEEE80211_STA_AUTHORIZED) {
-+ if (unlikely(!sta ||
-+ info->control.flags & IEEE80211_TX_CTRL_RATE_INJECT)) {
- flags |= IWL_TX_FLAGS_CMD_RATE;
- rate_n_flags =
- iwl_mvm_get_tx_rate_n_flags(mvm, info, sta,
- hdr->frame_control);
-+ } else if (!ieee80211_is_data(hdr->frame_control) ||
-+ mvmsta->sta_state < IEEE80211_STA_AUTHORIZED) {
-+ /* These are important frames */
-+ flags |= IWL_TX_FLAGS_HIGH_PRI;
- }
-
- if (mvm->trans->trans_cfg->device_family >=
---
-2.42.0
-
Signed-off-by: Ira Weiny <ira.weiny@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
- drivers/nvdimm/region_devs.c | 8 ++++----
+ drivers/nvdimm/region_devs.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
-diff --git a/drivers/nvdimm/region_devs.c b/drivers/nvdimm/region_devs.c
-index aac6708d33caa..c79e4219f14dd 100644
--- a/drivers/nvdimm/region_devs.c
+++ b/drivers/nvdimm/region_devs.c
-@@ -907,7 +907,8 @@ unsigned int nd_region_acquire_lane(struct nd_region *nd_region)
+@@ -898,7 +898,8 @@ unsigned int nd_region_acquire_lane(stru
{
unsigned int cpu, lane;
if (nd_region->num_lanes < nr_cpu_ids) {
struct nd_percpu_lane *ndl_lock, *ndl_count;
-@@ -926,16 +927,15 @@ EXPORT_SYMBOL(nd_region_acquire_lane);
+@@ -917,16 +918,15 @@ EXPORT_SYMBOL(nd_region_acquire_lane);
void nd_region_release_lane(struct nd_region *nd_region, unsigned int lane)
{
if (nd_region->num_lanes < nr_cpu_ids) {
}
EXPORT_SYMBOL(nd_region_release_lane);
---
-2.42.0
-
vfs-fix-readahead-2-on-block-devices.patch
genirq-matrix-exclude-managed-interrupts-in-irq_matr.patch
i40e-fix-potential-memory-leaks-in-i40e_remove.patch
-wifi-iwlwifi-use-fw-rate-for-non-data-frames.patch
tcp-call-tcp_try_undo_recovery-when-an-rtod-tfo-syna.patch
wifi-rtw88-debug-fix-the-null-vs-is_err-bug-for-debu.patch
wifi-mt76-mt7603-rework-fix-rx-pse-hang-check.patch
+++ /dev/null
-From 56502033b1691507df050e88d1297e04fb81ed15 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Wed, 13 Sep 2023 14:56:45 +0300
-Subject: wifi: iwlwifi: Use FW rate for non-data frames
-
-From: Miri Korenblit <miriam.rachel.korenblit@intel.com>
-
-[ Upstream commit 499d02790495958506a64f37ceda7e97345a50a8 ]
-
-Currently we are setting the rate in the tx cmd for
-mgmt frames (e.g. during connection establishment).
-This was problematic when sending mgmt frames in eSR mode,
-as we don't know what link this frame will be sent on
-(This is decided by the FW), so we don't know what is the
-lowest rate.
-Fix this by not setting the rate in tx cmd and rely
-on FW to choose the right one.
-Set rate only for injected frames with fixed rate,
-or when no sta is given.
-Also set for important frames (EAPOL etc.) the High Priority flag.
-
-Fixes: 055b22e770dd ("iwlwifi: mvm: Set Tx rate and flags when there is not station")
-Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
-Signed-off-by: Gregory Greenman <gregory.greenman@intel.com>
-Link: https://lore.kernel.org/r/20230913145231.6c7e59620ee0.I6eaed3ccdd6dd62b9e664facc484081fc5275843@changeid
-Signed-off-by: Johannes Berg <johannes.berg@intel.com>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/net/wireless/intel/iwlwifi/mvm/tx.c | 14 +++++++++-----
- 1 file changed, 9 insertions(+), 5 deletions(-)
-
-diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
-index 9a81ce299d0d1..fbcd46aedade3 100644
---- a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
-+++ b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
-@@ -529,16 +529,20 @@ iwl_mvm_set_tx_params(struct iwl_mvm *mvm, struct sk_buff *skb,
- flags |= IWL_TX_FLAGS_ENCRYPT_DIS;
-
- /*
-- * For data packets rate info comes from the fw. Only
-- * set rate/antenna during connection establishment or in case
-- * no station is given.
-+ * For data and mgmt packets rate info comes from the fw. Only
-+ * set rate/antenna for injected frames with fixed rate, or
-+ * when no sta is given.
- */
-- if (!sta || !ieee80211_is_data(hdr->frame_control) ||
-- mvmsta->sta_state < IEEE80211_STA_AUTHORIZED) {
-+ if (unlikely(!sta ||
-+ info->control.flags & IEEE80211_TX_CTRL_RATE_INJECT)) {
- flags |= IWL_TX_FLAGS_CMD_RATE;
- rate_n_flags =
- iwl_mvm_get_tx_rate_n_flags(mvm, info, sta,
- hdr->frame_control);
-+ } else if (!ieee80211_is_data(hdr->frame_control) ||
-+ mvmsta->sta_state < IEEE80211_STA_AUTHORIZED) {
-+ /* These are important frames */
-+ flags |= IWL_TX_FLAGS_HIGH_PRI;
- }
-
- if (mvm->trans->trans_cfg->device_family >=
---
-2.42.0
-
i40e-fix-potential-memory-leaks-in-i40e_remove.patch
iavf-fix-promiscuous-mode-configuration-flow-message.patch
selftests-bpf-correct-map_fd-to-data_fd-in-tailcalls.patch
-wifi-iwlwifi-use-fw-rate-for-non-data-frames.patch
udp-add-missing-write_once-around-up-encap_rcv.patch
tcp-call-tcp_try_undo_recovery-when-an-rtod-tfo-syna.patch
gve-use-size_add-in-call-to-struct_size.patch
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
- drivers/net/wireless/intel/iwlwifi/dvm/tx.c | 5 +++--
- drivers/net/wireless/intel/iwlwifi/iwl-trans.h | 7 ++++---
- drivers/net/wireless/intel/iwlwifi/mvm/tx.c | 4 ++--
- drivers/net/wireless/intel/iwlwifi/queue/tx.c | 9 +++++----
- drivers/net/wireless/intel/iwlwifi/queue/tx.h | 2 +-
+ drivers/net/wireless/intel/iwlwifi/dvm/tx.c | 5 +++--
+ drivers/net/wireless/intel/iwlwifi/iwl-trans.h | 7 ++++---
+ drivers/net/wireless/intel/iwlwifi/mvm/tx.c | 4 ++--
+ drivers/net/wireless/intel/iwlwifi/queue/tx.c | 9 +++++----
+ drivers/net/wireless/intel/iwlwifi/queue/tx.h | 2 +-
5 files changed, 15 insertions(+), 12 deletions(-)
-diff --git a/drivers/net/wireless/intel/iwlwifi/dvm/tx.c b/drivers/net/wireless/intel/iwlwifi/dvm/tx.c
-index 60a7b61d59aa3..ca1daec641c4f 100644
--- a/drivers/net/wireless/intel/iwlwifi/dvm/tx.c
+++ b/drivers/net/wireless/intel/iwlwifi/dvm/tx.c
@@ -3,6 +3,7 @@
*****************************************************************************/
#include <linux/kernel.h>
-@@ -1169,7 +1170,7 @@ void iwlagn_rx_reply_tx(struct iwl_priv *priv, struct iwl_rx_cmd_buffer *rxb)
+@@ -1169,7 +1170,7 @@ void iwlagn_rx_reply_tx(struct iwl_priv
iwlagn_check_ratid_empty(priv, sta_id, tid);
}
freed = 0;
-@@ -1315,7 +1316,7 @@ void iwlagn_rx_reply_compressed_ba(struct iwl_priv *priv,
+@@ -1315,7 +1316,7 @@ void iwlagn_rx_reply_compressed_ba(struc
* block-ack window (we assume that they've been successfully
* transmitted ... if not, it's too late anyway). */
iwl_trans_reclaim(priv->trans, scd_flow, ba_resp_scd_ssn,
IWL_DEBUG_TX_REPLY(priv, "REPLY_COMPRESSED_BA [%d] Received from %pM, "
"sta_id = %d\n",
-diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-trans.h b/drivers/net/wireless/intel/iwlwifi/iwl-trans.h
-index c9729e2718dc0..70022cadee35b 100644
--- a/drivers/net/wireless/intel/iwlwifi/iwl-trans.h
+++ b/drivers/net/wireless/intel/iwlwifi/iwl-trans.h
@@ -567,7 +567,7 @@ struct iwl_trans_ops {
void (*set_q_ptrs)(struct iwl_trans *trans, int queue, int ptr);
-@@ -1191,14 +1191,15 @@ static inline int iwl_trans_tx(struct iwl_trans *trans, struct sk_buff *skb,
+@@ -1191,14 +1191,15 @@ static inline int iwl_trans_tx(struct iw
}
static inline void iwl_trans_reclaim(struct iwl_trans *trans, int queue,
}
static inline void iwl_trans_set_q_ptrs(struct iwl_trans *trans, int queue,
-diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
-index 9804112ea4f79..caaf4d52e2c64 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
-@@ -1576,7 +1576,7 @@ static void iwl_mvm_rx_tx_cmd_single(struct iwl_mvm *mvm,
+@@ -1572,7 +1572,7 @@ static void iwl_mvm_rx_tx_cmd_single(str
seq_ctl = le16_to_cpu(tx_resp->seq_ctl);
/* we can free until ssn % q.n_bd not inclusive */
while (!skb_queue_empty(&skbs)) {
struct sk_buff *skb = __skb_dequeue(&skbs);
-@@ -1927,7 +1927,7 @@ static void iwl_mvm_tx_reclaim(struct iwl_mvm *mvm, int sta_id, int tid,
+@@ -1923,7 +1923,7 @@ static void iwl_mvm_tx_reclaim(struct iw
* block-ack window (we assume that they've been successfully
* transmitted ... if not, it's too late anyway).
*/
skb_queue_walk(&reclaimed_skbs, skb) {
struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-diff --git a/drivers/net/wireless/intel/iwlwifi/queue/tx.c b/drivers/net/wireless/intel/iwlwifi/queue/tx.c
-index 726185d6fab8b..8cf206837eeea 100644
--- a/drivers/net/wireless/intel/iwlwifi/queue/tx.c
+++ b/drivers/net/wireless/intel/iwlwifi/queue/tx.c
-@@ -1551,7 +1551,7 @@ void iwl_txq_progress(struct iwl_txq *txq)
+@@ -1551,7 +1551,7 @@ void iwl_txq_progress(struct iwl_txq *tx
/* Frees buffers until index _not_ inclusive */
void iwl_txq_reclaim(struct iwl_trans *trans, int txq_id, int ssn,
{
struct iwl_txq *txq = trans->txqs.txq[txq_id];
int tfd_num = iwl_txq_get_cmd_index(txq, ssn);
-@@ -1622,9 +1622,11 @@ void iwl_txq_reclaim(struct iwl_trans *trans, int txq_id, int ssn,
+@@ -1622,9 +1622,11 @@ void iwl_txq_reclaim(struct iwl_trans *t
if (iwl_txq_space(trans, txq) > txq->low_mark &&
test_bit(txq_id, trans->txqs.queue_stopped)) {
struct sk_buff_head overflow_skbs;
/*
* We are going to transmit from the overflow queue.
-@@ -1644,8 +1646,7 @@ void iwl_txq_reclaim(struct iwl_trans *trans, int txq_id, int ssn,
+@@ -1644,8 +1646,7 @@ void iwl_txq_reclaim(struct iwl_trans *t
*/
spin_unlock_bh(&txq->lock);
struct iwl_device_tx_cmd *dev_cmd_ptr;
dev_cmd_ptr = *(void **)((u8 *)skb->cb +
-diff --git a/drivers/net/wireless/intel/iwlwifi/queue/tx.h b/drivers/net/wireless/intel/iwlwifi/queue/tx.h
-index eca53bfd326d1..ceb6812fe20b2 100644
--- a/drivers/net/wireless/intel/iwlwifi/queue/tx.h
+++ b/drivers/net/wireless/intel/iwlwifi/queue/tx.h
-@@ -173,7 +173,7 @@ void iwl_txq_gen1_update_byte_cnt_tbl(struct iwl_trans *trans,
+@@ -173,7 +173,7 @@ void iwl_txq_gen1_update_byte_cnt_tbl(st
struct iwl_txq *txq, u16 byte_cnt,
int num_tbs);
void iwl_txq_reclaim(struct iwl_trans *trans, int txq_id, int ssn,
void iwl_txq_set_q_ptrs(struct iwl_trans *trans, int txq_id, int ptr);
void iwl_trans_txq_freeze_timer(struct iwl_trans *trans, unsigned long txqs,
bool freeze);
---
-2.42.0
-
+++ /dev/null
-From a886066cf838d993cf98867a6da57bb00c41c3c9 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Wed, 13 Sep 2023 14:56:45 +0300
-Subject: wifi: iwlwifi: Use FW rate for non-data frames
-
-From: Miri Korenblit <miriam.rachel.korenblit@intel.com>
-
-[ Upstream commit 499d02790495958506a64f37ceda7e97345a50a8 ]
-
-Currently we are setting the rate in the tx cmd for
-mgmt frames (e.g. during connection establishment).
-This was problematic when sending mgmt frames in eSR mode,
-as we don't know what link this frame will be sent on
-(This is decided by the FW), so we don't know what is the
-lowest rate.
-Fix this by not setting the rate in tx cmd and rely
-on FW to choose the right one.
-Set rate only for injected frames with fixed rate,
-or when no sta is given.
-Also set for important frames (EAPOL etc.) the High Priority flag.
-
-Fixes: 055b22e770dd ("iwlwifi: mvm: Set Tx rate and flags when there is not station")
-Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
-Signed-off-by: Gregory Greenman <gregory.greenman@intel.com>
-Link: https://lore.kernel.org/r/20230913145231.6c7e59620ee0.I6eaed3ccdd6dd62b9e664facc484081fc5275843@changeid
-Signed-off-by: Johannes Berg <johannes.berg@intel.com>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/net/wireless/intel/iwlwifi/mvm/tx.c | 14 +++++++++-----
- 1 file changed, 9 insertions(+), 5 deletions(-)
-
-diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
-index 2d01f6226b7c6..9804112ea4f79 100644
---- a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
-+++ b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
-@@ -524,16 +524,20 @@ iwl_mvm_set_tx_params(struct iwl_mvm *mvm, struct sk_buff *skb,
- flags |= IWL_TX_FLAGS_ENCRYPT_DIS;
-
- /*
-- * For data packets rate info comes from the fw. Only
-- * set rate/antenna during connection establishment or in case
-- * no station is given.
-+ * For data and mgmt packets rate info comes from the fw. Only
-+ * set rate/antenna for injected frames with fixed rate, or
-+ * when no sta is given.
- */
-- if (!sta || !ieee80211_is_data(hdr->frame_control) ||
-- mvmsta->sta_state < IEEE80211_STA_AUTHORIZED) {
-+ if (unlikely(!sta ||
-+ info->control.flags & IEEE80211_TX_CTRL_RATE_INJECT)) {
- flags |= IWL_TX_FLAGS_CMD_RATE;
- rate_n_flags =
- iwl_mvm_get_tx_rate_n_flags(mvm, info, sta,
- hdr->frame_control);
-+ } else if (!ieee80211_is_data(hdr->frame_control) ||
-+ mvmsta->sta_state < IEEE80211_STA_AUTHORIZED) {
-+ /* These are important frames */
-+ flags |= IWL_TX_FLAGS_HIGH_PRI;
- }
-
- if (mvm->trans->trans_cfg->device_family >=
---
-2.42.0
-
bpf-x86-allow-function-arguments-up-to-12-for-tracin.patch
bpf-x64-fix-tailcall-infinite-loop.patch
wifi-cfg80211-fix-kernel-doc-for-wiphy_delayed_work_.patch
-wifi-iwlwifi-use-fw-rate-for-non-data-frames.patch
udp-introduce-udp-udp_flags.patch
udp-move-udp-no_check6_tx-to-udp-udp_flags.patch
udp-move-udp-no_check6_rx-to-udp-udp_flags.patch
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
- drivers/net/wireless/intel/iwlwifi/dvm/tx.c | 5 +++--
- drivers/net/wireless/intel/iwlwifi/iwl-trans.h | 7 ++++---
- drivers/net/wireless/intel/iwlwifi/mvm/tx.c | 4 ++--
- drivers/net/wireless/intel/iwlwifi/queue/tx.c | 9 +++++----
- drivers/net/wireless/intel/iwlwifi/queue/tx.h | 2 +-
+ drivers/net/wireless/intel/iwlwifi/dvm/tx.c | 5 +++--
+ drivers/net/wireless/intel/iwlwifi/iwl-trans.h | 7 ++++---
+ drivers/net/wireless/intel/iwlwifi/mvm/tx.c | 4 ++--
+ drivers/net/wireless/intel/iwlwifi/queue/tx.c | 9 +++++----
+ drivers/net/wireless/intel/iwlwifi/queue/tx.h | 2 +-
5 files changed, 15 insertions(+), 12 deletions(-)
-diff --git a/drivers/net/wireless/intel/iwlwifi/dvm/tx.c b/drivers/net/wireless/intel/iwlwifi/dvm/tx.c
-index 60a7b61d59aa3..ca1daec641c4f 100644
--- a/drivers/net/wireless/intel/iwlwifi/dvm/tx.c
+++ b/drivers/net/wireless/intel/iwlwifi/dvm/tx.c
@@ -3,6 +3,7 @@
*****************************************************************************/
#include <linux/kernel.h>
-@@ -1169,7 +1170,7 @@ void iwlagn_rx_reply_tx(struct iwl_priv *priv, struct iwl_rx_cmd_buffer *rxb)
+@@ -1169,7 +1170,7 @@ void iwlagn_rx_reply_tx(struct iwl_priv
iwlagn_check_ratid_empty(priv, sta_id, tid);
}
freed = 0;
-@@ -1315,7 +1316,7 @@ void iwlagn_rx_reply_compressed_ba(struct iwl_priv *priv,
+@@ -1315,7 +1316,7 @@ void iwlagn_rx_reply_compressed_ba(struc
* block-ack window (we assume that they've been successfully
* transmitted ... if not, it's too late anyway). */
iwl_trans_reclaim(priv->trans, scd_flow, ba_resp_scd_ssn,
IWL_DEBUG_TX_REPLY(priv, "REPLY_COMPRESSED_BA [%d] Received from %pM, "
"sta_id = %d\n",
-diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-trans.h b/drivers/net/wireless/intel/iwlwifi/iwl-trans.h
-index b248944e11df9..b1a4be0069a7e 100644
--- a/drivers/net/wireless/intel/iwlwifi/iwl-trans.h
+++ b/drivers/net/wireless/intel/iwlwifi/iwl-trans.h
@@ -588,7 +588,7 @@ struct iwl_trans_ops {
void (*set_q_ptrs)(struct iwl_trans *trans, int queue, int ptr);
-@@ -1270,14 +1270,15 @@ static inline int iwl_trans_tx(struct iwl_trans *trans, struct sk_buff *skb,
+@@ -1270,14 +1270,15 @@ static inline int iwl_trans_tx(struct iw
}
static inline void iwl_trans_reclaim(struct iwl_trans *trans, int queue,
}
static inline void iwl_trans_set_q_ptrs(struct iwl_trans *trans, int queue,
-diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
-index 8bdb239295c39..177a4628a913e 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
-@@ -1603,7 +1603,7 @@ static void iwl_mvm_rx_tx_cmd_single(struct iwl_mvm *mvm,
+@@ -1599,7 +1599,7 @@ static void iwl_mvm_rx_tx_cmd_single(str
seq_ctl = le16_to_cpu(tx_resp->seq_ctl);
/* we can free until ssn % q.n_bd not inclusive */
while (!skb_queue_empty(&skbs)) {
struct sk_buff *skb = __skb_dequeue(&skbs);
-@@ -1955,7 +1955,7 @@ static void iwl_mvm_tx_reclaim(struct iwl_mvm *mvm, int sta_id, int tid,
+@@ -1951,7 +1951,7 @@ static void iwl_mvm_tx_reclaim(struct iw
* block-ack window (we assume that they've been successfully
* transmitted ... if not, it's too late anyway).
*/
skb_queue_walk(&reclaimed_skbs, skb) {
struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-diff --git a/drivers/net/wireless/intel/iwlwifi/queue/tx.c b/drivers/net/wireless/intel/iwlwifi/queue/tx.c
-index 5bb3cc3367c9f..64dedb1d11862 100644
--- a/drivers/net/wireless/intel/iwlwifi/queue/tx.c
+++ b/drivers/net/wireless/intel/iwlwifi/queue/tx.c
-@@ -1561,7 +1561,7 @@ void iwl_txq_progress(struct iwl_txq *txq)
+@@ -1561,7 +1561,7 @@ void iwl_txq_progress(struct iwl_txq *tx
/* Frees buffers until index _not_ inclusive */
void iwl_txq_reclaim(struct iwl_trans *trans, int txq_id, int ssn,
{
struct iwl_txq *txq = trans->txqs.txq[txq_id];
int tfd_num, read_ptr, last_to_free;
-@@ -1636,9 +1636,11 @@ void iwl_txq_reclaim(struct iwl_trans *trans, int txq_id, int ssn,
+@@ -1636,9 +1636,11 @@ void iwl_txq_reclaim(struct iwl_trans *t
if (iwl_txq_space(trans, txq) > txq->low_mark &&
test_bit(txq_id, trans->txqs.queue_stopped)) {
struct sk_buff_head overflow_skbs;
/*
* We are going to transmit from the overflow queue.
-@@ -1658,8 +1660,7 @@ void iwl_txq_reclaim(struct iwl_trans *trans, int txq_id, int ssn,
+@@ -1658,8 +1660,7 @@ void iwl_txq_reclaim(struct iwl_trans *t
*/
spin_unlock_bh(&txq->lock);
struct iwl_device_tx_cmd *dev_cmd_ptr;
dev_cmd_ptr = *(void **)((u8 *)skb->cb +
-diff --git a/drivers/net/wireless/intel/iwlwifi/queue/tx.h b/drivers/net/wireless/intel/iwlwifi/queue/tx.h
-index 1e4a24ab9bab2..b311426c84f05 100644
--- a/drivers/net/wireless/intel/iwlwifi/queue/tx.h
+++ b/drivers/net/wireless/intel/iwlwifi/queue/tx.h
-@@ -173,7 +173,7 @@ void iwl_txq_gen1_update_byte_cnt_tbl(struct iwl_trans *trans,
+@@ -173,7 +173,7 @@ void iwl_txq_gen1_update_byte_cnt_tbl(st
struct iwl_txq *txq, u16 byte_cnt,
int num_tbs);
void iwl_txq_reclaim(struct iwl_trans *trans, int txq_id, int ssn,
void iwl_txq_set_q_ptrs(struct iwl_trans *trans, int txq_id, int ptr);
void iwl_trans_txq_freeze_timer(struct iwl_trans *trans, unsigned long txqs,
bool freeze);
---
-2.42.0
-
Stable-dep-of: 43874283ce6c ("wifi: iwlwifi: mvm: fix iwl_mvm_mac_flush_sta()")
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
- .../net/wireless/intel/iwlwifi/mvm/mac80211.c | 6 ++++--
- .../net/wireless/intel/iwlwifi/mvm/mld-sta.c | 2 +-
- drivers/net/wireless/intel/iwlwifi/mvm/mvm.h | 2 +-
- drivers/net/wireless/intel/iwlwifi/mvm/sta.c | 9 ++++++---
- .../wireless/intel/iwlwifi/mvm/time-event.c | 7 ++++---
- drivers/net/wireless/intel/iwlwifi/mvm/tx.c | 18 ++----------------
+ drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c | 6 ++++--
+ drivers/net/wireless/intel/iwlwifi/mvm/mld-sta.c | 2 +-
+ drivers/net/wireless/intel/iwlwifi/mvm/mvm.h | 2 +-
+ drivers/net/wireless/intel/iwlwifi/mvm/sta.c | 9 ++++++---
+ drivers/net/wireless/intel/iwlwifi/mvm/time-event.c | 7 ++++---
+ drivers/net/wireless/intel/iwlwifi/mvm/tx.c | 18 ++----------------
6 files changed, 18 insertions(+), 26 deletions(-)
-diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
-index eb1fe0082eaf6..069aba0e064aa 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
-@@ -5584,7 +5584,8 @@ void iwl_mvm_mac_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
+@@ -5584,7 +5584,8 @@ void iwl_mvm_mac_flush(struct ieee80211_
WARN_ON_ONCE(sta != mvmvif->ap_sta && !sta->tdls);
if (drop) {
IWL_ERR(mvm, "flush request fail\n");
} else {
if (iwl_mvm_has_new_tx_api(mvm))
-@@ -5621,7 +5622,8 @@ void iwl_mvm_mac_flush_sta(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
+@@ -5621,7 +5622,8 @@ void iwl_mvm_mac_flush_sta(struct ieee80
mvmsta = iwl_mvm_sta_from_mac80211(sta);
IWL_ERR(mvm, "flush request fail\n");
}
mutex_unlock(&mvm->mutex);
-diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mld-sta.c b/drivers/net/wireless/intel/iwlwifi/mvm/mld-sta.c
-index 524852cf5cd2d..56f51344c193c 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/mld-sta.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mld-sta.c
-@@ -347,7 +347,7 @@ static int iwl_mvm_mld_rm_int_sta(struct iwl_mvm *mvm,
+@@ -347,7 +347,7 @@ static int iwl_mvm_mld_rm_int_sta(struct
return -EINVAL;
if (flush)
iwl_mvm_mld_disable_txq(mvm, BIT(int_sta->sta_id), queuptr, tid);
-diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h b/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h
-index b596eca562166..218f3bc31104b 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h
-@@ -1658,7 +1658,7 @@ const char *iwl_mvm_get_tx_fail_reason(u32 status);
+@@ -1658,7 +1658,7 @@ const char *iwl_mvm_get_tx_fail_reason(u
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_tids(struct iwl_mvm *mvm, u32 sta_id, u16 tids);
/* Utils to extract sta related data */
-diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/sta.c b/drivers/net/wireless/intel/iwlwifi/mvm/sta.c
-index 3b9a343d4f672..ebbe165510587 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/sta.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/sta.c
@@ -2097,7 +2097,8 @@ int iwl_mvm_rm_sta(struct iwl_mvm *mvm,
if (ret)
return ret;
if (iwl_mvm_has_new_tx_api(mvm)) {
-@@ -2408,7 +2409,8 @@ void iwl_mvm_free_bcast_sta_queues(struct iwl_mvm *mvm,
+@@ -2408,7 +2409,8 @@ void iwl_mvm_free_bcast_sta_queues(struc
lockdep_assert_held(&mvm->mutex);
switch (vif->type) {
case NL80211_IFTYPE_AP:
-@@ -2664,7 +2666,8 @@ int iwl_mvm_rm_mcast_sta(struct iwl_mvm *mvm, struct ieee80211_vif *vif)
+@@ -2664,7 +2666,8 @@ int iwl_mvm_rm_mcast_sta(struct iwl_mvm
lockdep_assert_held(&mvm->mutex);
iwl_mvm_disable_txq(mvm, NULL, mvmvif->deflink.mcast_sta.sta_id,
&mvmvif->deflink.cab_queue, 0);
-diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/time-event.c b/drivers/net/wireless/intel/iwlwifi/mvm/time-event.c
-index ff213247569a7..158266719ffd7 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/time-event.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/time-event.c
-@@ -81,8 +81,8 @@ void iwl_mvm_roc_done_wk(struct work_struct *wk)
+@@ -81,8 +81,8 @@ void iwl_mvm_roc_done_wk(struct work_str
struct ieee80211_vif *vif = mvm->p2p_device_vif;
mvmvif = iwl_mvm_vif_from_mac80211(vif);
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)
+@@ -113,7 +113,8 @@ void iwl_mvm_roc_done_wk(struct work_str
*/
if (test_and_clear_bit(IWL_MVM_STATUS_ROC_AUX_RUNNING, &mvm->status)) {
/* do the same in case of hot spot 2.0 */
if (mvm->mld_api_is_used) {
iwl_mvm_mld_rm_aux_sta(mvm);
-diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
-index 8158e6d9ef190..8bdb239295c39 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
-@@ -2297,24 +2297,10 @@ int iwl_mvm_flush_sta_tids(struct iwl_mvm *mvm, u32 sta_id, u16 tids)
+@@ -2293,24 +2293,10 @@ free_rsp:
return ret;
}
- return iwl_mvm_flush_tx_path(mvm, tfd_queue_msk);
+ return iwl_mvm_flush_tx_path(mvm, tfd_queue_mask);
}
---
-2.42.0
-
+++ /dev/null
-From eeabb8fca1131ba6c6bdeb89f9b528e463c47501 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Wed, 13 Sep 2023 14:56:45 +0300
-Subject: wifi: iwlwifi: Use FW rate for non-data frames
-
-From: Miri Korenblit <miriam.rachel.korenblit@intel.com>
-
-[ Upstream commit 499d02790495958506a64f37ceda7e97345a50a8 ]
-
-Currently we are setting the rate in the tx cmd for
-mgmt frames (e.g. during connection establishment).
-This was problematic when sending mgmt frames in eSR mode,
-as we don't know what link this frame will be sent on
-(This is decided by the FW), so we don't know what is the
-lowest rate.
-Fix this by not setting the rate in tx cmd and rely
-on FW to choose the right one.
-Set rate only for injected frames with fixed rate,
-or when no sta is given.
-Also set for important frames (EAPOL etc.) the High Priority flag.
-
-Fixes: 055b22e770dd ("iwlwifi: mvm: Set Tx rate and flags when there is not station")
-Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
-Signed-off-by: Gregory Greenman <gregory.greenman@intel.com>
-Link: https://lore.kernel.org/r/20230913145231.6c7e59620ee0.I6eaed3ccdd6dd62b9e664facc484081fc5275843@changeid
-Signed-off-by: Johannes Berg <johannes.berg@intel.com>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/net/wireless/intel/iwlwifi/mvm/tx.c | 14 +++++++++-----
- 1 file changed, 9 insertions(+), 5 deletions(-)
-
-diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
-index 898dca3936435..8158e6d9ef190 100644
---- a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
-+++ b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
-@@ -536,16 +536,20 @@ iwl_mvm_set_tx_params(struct iwl_mvm *mvm, struct sk_buff *skb,
- flags |= IWL_TX_FLAGS_ENCRYPT_DIS;
-
- /*
-- * For data packets rate info comes from the fw. Only
-- * set rate/antenna during connection establishment or in case
-- * no station is given.
-+ * For data and mgmt packets rate info comes from the fw. Only
-+ * set rate/antenna for injected frames with fixed rate, or
-+ * when no sta is given.
- */
-- if (!sta || !ieee80211_is_data(hdr->frame_control) ||
-- mvmsta->sta_state < IEEE80211_STA_AUTHORIZED) {
-+ if (unlikely(!sta ||
-+ info->control.flags & IEEE80211_TX_CTRL_RATE_INJECT)) {
- flags |= IWL_TX_FLAGS_CMD_RATE;
- rate_n_flags =
- iwl_mvm_get_tx_rate_n_flags(mvm, info, sta,
- hdr->frame_control);
-+ } else if (!ieee80211_is_data(hdr->frame_control) ||
-+ mvmsta->sta_state < IEEE80211_STA_AUTHORIZED) {
-+ /* These are important frames */
-+ flags |= IWL_TX_FLAGS_HIGH_PRI;
- }
-
- if (mvm->trans->trans_cfg->device_family >=
---
-2.42.0
-
selftests-bpf-correct-map_fd-to-data_fd-in-tailcalls.patch
bpf-x64-fix-tailcall-infinite-loop.patch
wifi-cfg80211-fix-kernel-doc-for-wiphy_delayed_work_.patch
-wifi-iwlwifi-use-fw-rate-for-non-data-frames.patch
udp-introduce-udp-udp_flags.patch
udp-move-udp-no_check6_tx-to-udp-udp_flags.patch
udp-move-udp-no_check6_rx-to-udp-udp_flags.patch
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
- drivers/net/wireless/intel/iwlwifi/dvm/tx.c | 5 +++--
- drivers/net/wireless/intel/iwlwifi/iwl-trans.h | 7 ++++---
- drivers/net/wireless/intel/iwlwifi/mvm/tx.c | 4 ++--
- drivers/net/wireless/intel/iwlwifi/queue/tx.c | 9 +++++----
- drivers/net/wireless/intel/iwlwifi/queue/tx.h | 2 +-
+ drivers/net/wireless/intel/iwlwifi/dvm/tx.c | 5 +++--
+ drivers/net/wireless/intel/iwlwifi/iwl-trans.h | 7 ++++---
+ drivers/net/wireless/intel/iwlwifi/mvm/tx.c | 4 ++--
+ drivers/net/wireless/intel/iwlwifi/queue/tx.c | 9 +++++----
+ drivers/net/wireless/intel/iwlwifi/queue/tx.h | 2 +-
5 files changed, 15 insertions(+), 12 deletions(-)
-diff --git a/drivers/net/wireless/intel/iwlwifi/dvm/tx.c b/drivers/net/wireless/intel/iwlwifi/dvm/tx.c
-index 60a7b61d59aa3..ca1daec641c4f 100644
--- a/drivers/net/wireless/intel/iwlwifi/dvm/tx.c
+++ b/drivers/net/wireless/intel/iwlwifi/dvm/tx.c
@@ -3,6 +3,7 @@
*****************************************************************************/
#include <linux/kernel.h>
-@@ -1169,7 +1170,7 @@ void iwlagn_rx_reply_tx(struct iwl_priv *priv, struct iwl_rx_cmd_buffer *rxb)
+@@ -1169,7 +1170,7 @@ void iwlagn_rx_reply_tx(struct iwl_priv
iwlagn_check_ratid_empty(priv, sta_id, tid);
}
freed = 0;
-@@ -1315,7 +1316,7 @@ void iwlagn_rx_reply_compressed_ba(struct iwl_priv *priv,
+@@ -1315,7 +1316,7 @@ void iwlagn_rx_reply_compressed_ba(struc
* block-ack window (we assume that they've been successfully
* transmitted ... if not, it's too late anyway). */
iwl_trans_reclaim(priv->trans, scd_flow, ba_resp_scd_ssn,
IWL_DEBUG_TX_REPLY(priv, "REPLY_COMPRESSED_BA [%d] Received from %pM, "
"sta_id = %d\n",
-diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-trans.h b/drivers/net/wireless/intel/iwlwifi/iwl-trans.h
-index 1b3c976d19feb..168eda2132fb8 100644
--- a/drivers/net/wireless/intel/iwlwifi/iwl-trans.h
+++ b/drivers/net/wireless/intel/iwlwifi/iwl-trans.h
@@ -588,7 +588,7 @@ struct iwl_trans_ops {
void (*set_q_ptrs)(struct iwl_trans *trans, int queue, int ptr);
-@@ -1273,14 +1273,15 @@ static inline int iwl_trans_tx(struct iwl_trans *trans, struct sk_buff *skb,
+@@ -1273,14 +1273,15 @@ static inline int iwl_trans_tx(struct iw
}
static inline void iwl_trans_reclaim(struct iwl_trans *trans, int queue,
}
static inline void iwl_trans_set_q_ptrs(struct iwl_trans *trans, int queue,
-diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
-index 8bdb239295c39..177a4628a913e 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
-@@ -1603,7 +1603,7 @@ static void iwl_mvm_rx_tx_cmd_single(struct iwl_mvm *mvm,
+@@ -1599,7 +1599,7 @@ static void iwl_mvm_rx_tx_cmd_single(str
seq_ctl = le16_to_cpu(tx_resp->seq_ctl);
/* we can free until ssn % q.n_bd not inclusive */
while (!skb_queue_empty(&skbs)) {
struct sk_buff *skb = __skb_dequeue(&skbs);
-@@ -1955,7 +1955,7 @@ static void iwl_mvm_tx_reclaim(struct iwl_mvm *mvm, int sta_id, int tid,
+@@ -1951,7 +1951,7 @@ static void iwl_mvm_tx_reclaim(struct iw
* block-ack window (we assume that they've been successfully
* transmitted ... if not, it's too late anyway).
*/
skb_queue_walk(&reclaimed_skbs, skb) {
struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-diff --git a/drivers/net/wireless/intel/iwlwifi/queue/tx.c b/drivers/net/wireless/intel/iwlwifi/queue/tx.c
-index 340240b8954f6..ca74b1b63cac1 100644
--- a/drivers/net/wireless/intel/iwlwifi/queue/tx.c
+++ b/drivers/net/wireless/intel/iwlwifi/queue/tx.c
-@@ -1575,7 +1575,7 @@ void iwl_txq_progress(struct iwl_txq *txq)
+@@ -1575,7 +1575,7 @@ void iwl_txq_progress(struct iwl_txq *tx
/* Frees buffers until index _not_ inclusive */
void iwl_txq_reclaim(struct iwl_trans *trans, int txq_id, int ssn,
{
struct iwl_txq *txq = trans->txqs.txq[txq_id];
int tfd_num, read_ptr, last_to_free;
-@@ -1650,9 +1650,11 @@ void iwl_txq_reclaim(struct iwl_trans *trans, int txq_id, int ssn,
+@@ -1650,9 +1650,11 @@ void iwl_txq_reclaim(struct iwl_trans *t
if (iwl_txq_space(trans, txq) > txq->low_mark &&
test_bit(txq_id, trans->txqs.queue_stopped)) {
struct sk_buff_head overflow_skbs;
/*
* We are going to transmit from the overflow queue.
-@@ -1672,8 +1674,7 @@ void iwl_txq_reclaim(struct iwl_trans *trans, int txq_id, int ssn,
+@@ -1672,8 +1674,7 @@ void iwl_txq_reclaim(struct iwl_trans *t
*/
spin_unlock_bh(&txq->lock);
struct iwl_device_tx_cmd *dev_cmd_ptr;
dev_cmd_ptr = *(void **)((u8 *)skb->cb +
-diff --git a/drivers/net/wireless/intel/iwlwifi/queue/tx.h b/drivers/net/wireless/intel/iwlwifi/queue/tx.h
-index b7d3808588bfb..4c09bc1930fa1 100644
--- a/drivers/net/wireless/intel/iwlwifi/queue/tx.h
+++ b/drivers/net/wireless/intel/iwlwifi/queue/tx.h
-@@ -179,7 +179,7 @@ void iwl_txq_gen1_update_byte_cnt_tbl(struct iwl_trans *trans,
+@@ -179,7 +179,7 @@ void iwl_txq_gen1_update_byte_cnt_tbl(st
struct iwl_txq *txq, u16 byte_cnt,
int num_tbs);
void iwl_txq_reclaim(struct iwl_trans *trans, int txq_id, int ssn,
void iwl_txq_set_q_ptrs(struct iwl_trans *trans, int txq_id, int ptr);
void iwl_trans_txq_freeze_timer(struct iwl_trans *trans, unsigned long txqs,
bool freeze);
---
-2.42.0
-
Stable-dep-of: 43874283ce6c ("wifi: iwlwifi: mvm: fix iwl_mvm_mac_flush_sta()")
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
- .../net/wireless/intel/iwlwifi/mvm/mac80211.c | 6 ++++--
- .../net/wireless/intel/iwlwifi/mvm/mld-sta.c | 2 +-
- drivers/net/wireless/intel/iwlwifi/mvm/mvm.h | 2 +-
- drivers/net/wireless/intel/iwlwifi/mvm/sta.c | 9 ++++++---
- .../wireless/intel/iwlwifi/mvm/time-event.c | 7 ++++---
- drivers/net/wireless/intel/iwlwifi/mvm/tx.c | 18 ++----------------
+ drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c | 6 ++++--
+ drivers/net/wireless/intel/iwlwifi/mvm/mld-sta.c | 2 +-
+ drivers/net/wireless/intel/iwlwifi/mvm/mvm.h | 2 +-
+ drivers/net/wireless/intel/iwlwifi/mvm/sta.c | 9 ++++++---
+ drivers/net/wireless/intel/iwlwifi/mvm/time-event.c | 7 ++++---
+ drivers/net/wireless/intel/iwlwifi/mvm/tx.c | 18 ++----------------
6 files changed, 18 insertions(+), 26 deletions(-)
-diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
-index a3058d7c77574..e68026a657059 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
-@@ -5579,7 +5579,8 @@ void iwl_mvm_mac_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
+@@ -5579,7 +5579,8 @@ void iwl_mvm_mac_flush(struct ieee80211_
}
if (drop) {
IWL_ERR(mvm, "flush request fail\n");
} else {
if (iwl_mvm_has_new_tx_api(mvm))
-@@ -5616,7 +5617,8 @@ void iwl_mvm_mac_flush_sta(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
+@@ -5616,7 +5617,8 @@ void iwl_mvm_mac_flush_sta(struct ieee80
mvmsta = iwl_mvm_sta_from_mac80211(sta);
IWL_ERR(mvm, "flush request fail\n");
}
mutex_unlock(&mvm->mutex);
-diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mld-sta.c b/drivers/net/wireless/intel/iwlwifi/mvm/mld-sta.c
-index 524852cf5cd2d..56f51344c193c 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/mld-sta.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mld-sta.c
-@@ -347,7 +347,7 @@ static int iwl_mvm_mld_rm_int_sta(struct iwl_mvm *mvm,
+@@ -347,7 +347,7 @@ static int iwl_mvm_mld_rm_int_sta(struct
return -EINVAL;
if (flush)
iwl_mvm_mld_disable_txq(mvm, BIT(int_sta->sta_id), queuptr, tid);
-diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h b/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h
-index b596eca562166..218f3bc31104b 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h
-@@ -1658,7 +1658,7 @@ const char *iwl_mvm_get_tx_fail_reason(u32 status);
+@@ -1658,7 +1658,7 @@ const char *iwl_mvm_get_tx_fail_reason(u
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_tids(struct iwl_mvm *mvm, u32 sta_id, u16 tids);
/* Utils to extract sta related data */
-diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/sta.c b/drivers/net/wireless/intel/iwlwifi/mvm/sta.c
-index 3b9a343d4f672..ebbe165510587 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/sta.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/sta.c
@@ -2097,7 +2097,8 @@ int iwl_mvm_rm_sta(struct iwl_mvm *mvm,
if (ret)
return ret;
if (iwl_mvm_has_new_tx_api(mvm)) {
-@@ -2408,7 +2409,8 @@ void iwl_mvm_free_bcast_sta_queues(struct iwl_mvm *mvm,
+@@ -2408,7 +2409,8 @@ void iwl_mvm_free_bcast_sta_queues(struc
lockdep_assert_held(&mvm->mutex);
switch (vif->type) {
case NL80211_IFTYPE_AP:
-@@ -2664,7 +2666,8 @@ int iwl_mvm_rm_mcast_sta(struct iwl_mvm *mvm, struct ieee80211_vif *vif)
+@@ -2664,7 +2666,8 @@ int iwl_mvm_rm_mcast_sta(struct iwl_mvm
lockdep_assert_held(&mvm->mutex);
iwl_mvm_disable_txq(mvm, NULL, mvmvif->deflink.mcast_sta.sta_id,
&mvmvif->deflink.cab_queue, 0);
-diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/time-event.c b/drivers/net/wireless/intel/iwlwifi/mvm/time-event.c
-index ff213247569a7..158266719ffd7 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/time-event.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/time-event.c
-@@ -81,8 +81,8 @@ void iwl_mvm_roc_done_wk(struct work_struct *wk)
+@@ -81,8 +81,8 @@ void iwl_mvm_roc_done_wk(struct work_str
struct ieee80211_vif *vif = mvm->p2p_device_vif;
mvmvif = iwl_mvm_vif_from_mac80211(vif);
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)
+@@ -113,7 +113,8 @@ void iwl_mvm_roc_done_wk(struct work_str
*/
if (test_and_clear_bit(IWL_MVM_STATUS_ROC_AUX_RUNNING, &mvm->status)) {
/* do the same in case of hot spot 2.0 */
if (mvm->mld_api_is_used) {
iwl_mvm_mld_rm_aux_sta(mvm);
-diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
-index 8158e6d9ef190..8bdb239295c39 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
-@@ -2297,24 +2297,10 @@ int iwl_mvm_flush_sta_tids(struct iwl_mvm *mvm, u32 sta_id, u16 tids)
+@@ -2293,24 +2293,10 @@ free_rsp:
return ret;
}
- return iwl_mvm_flush_tx_path(mvm, tfd_queue_msk);
+ return iwl_mvm_flush_tx_path(mvm, tfd_queue_mask);
}
---
-2.42.0
-
+++ /dev/null
-From c4b10f971eb9fd5bf98497d593714976d30c4c29 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Wed, 13 Sep 2023 14:56:45 +0300
-Subject: wifi: iwlwifi: Use FW rate for non-data frames
-
-From: Miri Korenblit <miriam.rachel.korenblit@intel.com>
-
-[ Upstream commit 499d02790495958506a64f37ceda7e97345a50a8 ]
-
-Currently we are setting the rate in the tx cmd for
-mgmt frames (e.g. during connection establishment).
-This was problematic when sending mgmt frames in eSR mode,
-as we don't know what link this frame will be sent on
-(This is decided by the FW), so we don't know what is the
-lowest rate.
-Fix this by not setting the rate in tx cmd and rely
-on FW to choose the right one.
-Set rate only for injected frames with fixed rate,
-or when no sta is given.
-Also set for important frames (EAPOL etc.) the High Priority flag.
-
-Fixes: 055b22e770dd ("iwlwifi: mvm: Set Tx rate and flags when there is not station")
-Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
-Signed-off-by: Gregory Greenman <gregory.greenman@intel.com>
-Link: https://lore.kernel.org/r/20230913145231.6c7e59620ee0.I6eaed3ccdd6dd62b9e664facc484081fc5275843@changeid
-Signed-off-by: Johannes Berg <johannes.berg@intel.com>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/net/wireless/intel/iwlwifi/mvm/tx.c | 14 +++++++++-----
- 1 file changed, 9 insertions(+), 5 deletions(-)
-
-diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
-index 898dca3936435..8158e6d9ef190 100644
---- a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
-+++ b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
-@@ -536,16 +536,20 @@ iwl_mvm_set_tx_params(struct iwl_mvm *mvm, struct sk_buff *skb,
- flags |= IWL_TX_FLAGS_ENCRYPT_DIS;
-
- /*
-- * For data packets rate info comes from the fw. Only
-- * set rate/antenna during connection establishment or in case
-- * no station is given.
-+ * For data and mgmt packets rate info comes from the fw. Only
-+ * set rate/antenna for injected frames with fixed rate, or
-+ * when no sta is given.
- */
-- if (!sta || !ieee80211_is_data(hdr->frame_control) ||
-- mvmsta->sta_state < IEEE80211_STA_AUTHORIZED) {
-+ if (unlikely(!sta ||
-+ info->control.flags & IEEE80211_TX_CTRL_RATE_INJECT)) {
- flags |= IWL_TX_FLAGS_CMD_RATE;
- rate_n_flags =
- iwl_mvm_get_tx_rate_n_flags(mvm, info, sta,
- hdr->frame_control);
-+ } else if (!ieee80211_is_data(hdr->frame_control) ||
-+ mvmsta->sta_state < IEEE80211_STA_AUTHORIZED) {
-+ /* These are important frames */
-+ flags |= IWL_TX_FLAGS_HIGH_PRI;
- }
-
- if (mvm->trans->trans_cfg->device_family >=
---
-2.42.0
-