From: Greg Kroah-Hartman Date: Wed, 15 Nov 2023 22:00:14 +0000 (-0500) Subject: drop wifi-iwlwifi-use-fw-rate-for-non-data-frames.patch from everywhere X-Git-Tag: v4.14.330~6 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=dcd62809d2acf090f02fd27bf7005afd359632e1;p=thirdparty%2Fkernel%2Fstable-queue.git drop wifi-iwlwifi-use-fw-rate-for-non-data-frames.patch from everywhere --- diff --git a/queue-5.10/series b/queue-5.10/series index 80abe0e72db..86f25be0e83 100644 --- a/queue-5.10/series +++ b/queue-5.10/series @@ -7,7 +7,6 @@ x86-boot-fix-incorrect-startup_gdt_descr.size.patch 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 diff --git a/queue-5.10/wifi-iwlwifi-use-fw-rate-for-non-data-frames.patch b/queue-5.10/wifi-iwlwifi-use-fw-rate-for-non-data-frames.patch deleted file mode 100644 index e34c7c5cdcc..00000000000 --- a/queue-5.10/wifi-iwlwifi-use-fw-rate-for-non-data-frames.patch +++ /dev/null @@ -1,64 +0,0 @@ -From 3c2f389e124ad826a72bed5008916b62f5d86108 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 13 Sep 2023 14:56:45 +0300 -Subject: wifi: iwlwifi: Use FW rate for non-data frames - -From: Miri Korenblit - -[ 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 -Signed-off-by: Gregory Greenman -Link: https://lore.kernel.org/r/20230913145231.6c7e59620ee0.I6eaed3ccdd6dd62b9e664facc484081fc5275843@changeid -Signed-off-by: Johannes Berg -Signed-off-by: Sasha Levin ---- - 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 - diff --git a/queue-5.15/series b/queue-5.15/series index f2053f87c4f..385a078e3cd 100644 --- a/queue-5.15/series +++ b/queue-5.15/series @@ -13,7 +13,6 @@ genirq-matrix-exclude-managed-interrupts-in-irq_matr.patch 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 diff --git a/queue-5.15/wifi-iwlwifi-empty-overflow-queue-during-flush.patch b/queue-5.15/wifi-iwlwifi-empty-overflow-queue-during-flush.patch index 59b2ac208b2..bba74c81f17 100644 --- a/queue-5.15/wifi-iwlwifi-empty-overflow-queue-during-flush.patch +++ b/queue-5.15/wifi-iwlwifi-empty-overflow-queue-during-flush.patch @@ -91,7 +91,7 @@ Signed-off-by: Sasha Levin 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 */ @@ -100,7 +100,7 @@ Signed-off-by: Sasha Levin 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). */ diff --git a/queue-5.15/wifi-iwlwifi-use-fw-rate-for-non-data-frames.patch b/queue-5.15/wifi-iwlwifi-use-fw-rate-for-non-data-frames.patch deleted file mode 100644 index dbbccec46e6..00000000000 --- a/queue-5.15/wifi-iwlwifi-use-fw-rate-for-non-data-frames.patch +++ /dev/null @@ -1,64 +0,0 @@ -From e6fd3bc394c77358025424a510f61d5c0184e39b Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 13 Sep 2023 14:56:45 +0300 -Subject: wifi: iwlwifi: Use FW rate for non-data frames - -From: Miri Korenblit - -[ 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 -Signed-off-by: Gregory Greenman -Link: https://lore.kernel.org/r/20230913145231.6c7e59620ee0.I6eaed3ccdd6dd62b9e664facc484081fc5275843@changeid -Signed-off-by: Johannes Berg -Signed-off-by: Sasha Levin ---- - 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 - diff --git a/queue-5.4/nd_btt-make-btt-lanes-preemptible.patch b/queue-5.4/nd_btt-make-btt-lanes-preemptible.patch index 0c8c4e50796..1d27263d04a 100644 --- a/queue-5.4/nd_btt-make-btt-lanes-preemptible.patch +++ b/queue-5.4/nd_btt-make-btt-lanes-preemptible.patch @@ -53,14 +53,12 @@ Reviewed-by: Vishal Verma Signed-off-by: Ira Weiny Signed-off-by: Sasha Levin --- - 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; @@ -70,7 +68,7 @@ index aac6708d33caa..c79e4219f14dd 100644 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) { @@ -89,6 +87,3 @@ index aac6708d33caa..c79e4219f14dd 100644 } EXPORT_SYMBOL(nd_region_release_lane); --- -2.42.0 - diff --git a/queue-5.4/series b/queue-5.4/series index 3ff2ee4d789..e3468f78772 100644 --- a/queue-5.4/series +++ b/queue-5.4/series @@ -1,7 +1,6 @@ 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 diff --git a/queue-5.4/wifi-iwlwifi-use-fw-rate-for-non-data-frames.patch b/queue-5.4/wifi-iwlwifi-use-fw-rate-for-non-data-frames.patch deleted file mode 100644 index 69c8b65262b..00000000000 --- a/queue-5.4/wifi-iwlwifi-use-fw-rate-for-non-data-frames.patch +++ /dev/null @@ -1,64 +0,0 @@ -From 56502033b1691507df050e88d1297e04fb81ed15 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 13 Sep 2023 14:56:45 +0300 -Subject: wifi: iwlwifi: Use FW rate for non-data frames - -From: Miri Korenblit - -[ 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 -Signed-off-by: Gregory Greenman -Link: https://lore.kernel.org/r/20230913145231.6c7e59620ee0.I6eaed3ccdd6dd62b9e664facc484081fc5275843@changeid -Signed-off-by: Johannes Berg -Signed-off-by: Sasha Levin ---- - 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 - diff --git a/queue-6.1/series b/queue-6.1/series index 09004dfb72d..36477af968b 100644 --- a/queue-6.1/series +++ b/queue-6.1/series @@ -27,7 +27,6 @@ wifi-iwlwifi-honor-the-enable_ini-value.patch 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 diff --git a/queue-6.1/wifi-iwlwifi-empty-overflow-queue-during-flush.patch b/queue-6.1/wifi-iwlwifi-empty-overflow-queue-during-flush.patch index 9a661d1f021..fdcc62e5a77 100644 --- a/queue-6.1/wifi-iwlwifi-empty-overflow-queue-during-flush.patch +++ b/queue-6.1/wifi-iwlwifi-empty-overflow-queue-during-flush.patch @@ -25,15 +25,13 @@ Link: https://lore.kernel.org/r/20231022173519.caf06c8709d9.Ibf664ccb3f952e836f8 Signed-off-by: Johannes Berg Signed-off-by: Sasha Levin --- - 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 @@ @@ -44,7 +42,7 @@ index 60a7b61d59aa3..ca1daec641c4f 100644 *****************************************************************************/ #include -@@ -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); } @@ -53,7 +51,7 @@ index 60a7b61d59aa3..ca1daec641c4f 100644 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, @@ -62,8 +60,6 @@ index 60a7b61d59aa3..ca1daec641c4f 100644 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 { @@ -75,7 +71,7 @@ index c9729e2718dc0..70022cadee35b 100644 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, @@ -93,11 +89,9 @@ index c9729e2718dc0..70022cadee35b 100644 } 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 */ @@ -106,7 +100,7 @@ index 9804112ea4f79..caaf4d52e2c64 100644 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). */ @@ -115,11 +109,9 @@ index 9804112ea4f79..caaf4d52e2c64 100644 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, @@ -128,7 +120,7 @@ index 726185d6fab8b..8cf206837eeea 100644 { 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; @@ -141,7 +133,7 @@ index 726185d6fab8b..8cf206837eeea 100644 /* * 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); @@ -151,11 +143,9 @@ index 726185d6fab8b..8cf206837eeea 100644 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, @@ -164,6 +154,3 @@ index eca53bfd326d1..ceb6812fe20b2 100644 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 - diff --git a/queue-6.1/wifi-iwlwifi-use-fw-rate-for-non-data-frames.patch b/queue-6.1/wifi-iwlwifi-use-fw-rate-for-non-data-frames.patch deleted file mode 100644 index 888ff93baf5..00000000000 --- a/queue-6.1/wifi-iwlwifi-use-fw-rate-for-non-data-frames.patch +++ /dev/null @@ -1,64 +0,0 @@ -From a886066cf838d993cf98867a6da57bb00c41c3c9 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 13 Sep 2023 14:56:45 +0300 -Subject: wifi: iwlwifi: Use FW rate for non-data frames - -From: Miri Korenblit - -[ 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 -Signed-off-by: Gregory Greenman -Link: https://lore.kernel.org/r/20230913145231.6c7e59620ee0.I6eaed3ccdd6dd62b9e664facc484081fc5275843@changeid -Signed-off-by: Johannes Berg -Signed-off-by: Sasha Levin ---- - 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 - diff --git a/queue-6.5/series b/queue-6.5/series index cab49252dc1..44cc3973168 100644 --- a/queue-6.5/series +++ b/queue-6.5/series @@ -52,7 +52,6 @@ bpf-x86-save-restore-regs-with-bpf_dw-size.patch 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 diff --git a/queue-6.5/wifi-iwlwifi-empty-overflow-queue-during-flush.patch b/queue-6.5/wifi-iwlwifi-empty-overflow-queue-during-flush.patch index 1ec4f26aac7..63d7e5a1dfd 100644 --- a/queue-6.5/wifi-iwlwifi-empty-overflow-queue-during-flush.patch +++ b/queue-6.5/wifi-iwlwifi-empty-overflow-queue-during-flush.patch @@ -25,15 +25,13 @@ Link: https://lore.kernel.org/r/20231022173519.caf06c8709d9.Ibf664ccb3f952e836f8 Signed-off-by: Johannes Berg Signed-off-by: Sasha Levin --- - 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 @@ @@ -44,7 +42,7 @@ index 60a7b61d59aa3..ca1daec641c4f 100644 *****************************************************************************/ #include -@@ -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); } @@ -53,7 +51,7 @@ index 60a7b61d59aa3..ca1daec641c4f 100644 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, @@ -62,8 +60,6 @@ index 60a7b61d59aa3..ca1daec641c4f 100644 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 { @@ -75,7 +71,7 @@ index b248944e11df9..b1a4be0069a7e 100644 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, @@ -93,11 +89,9 @@ index b248944e11df9..b1a4be0069a7e 100644 } 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 */ @@ -106,7 +100,7 @@ index 8bdb239295c39..177a4628a913e 100644 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). */ @@ -115,11 +109,9 @@ index 8bdb239295c39..177a4628a913e 100644 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, @@ -128,7 +120,7 @@ index 5bb3cc3367c9f..64dedb1d11862 100644 { 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; @@ -141,7 +133,7 @@ index 5bb3cc3367c9f..64dedb1d11862 100644 /* * 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); @@ -151,11 +143,9 @@ index 5bb3cc3367c9f..64dedb1d11862 100644 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, @@ -164,6 +154,3 @@ index 1e4a24ab9bab2..b311426c84f05 100644 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 - diff --git a/queue-6.5/wifi-iwlwifi-mvm-change-iwl_mvm_flush_sta-api.patch b/queue-6.5/wifi-iwlwifi-mvm-change-iwl_mvm_flush_sta-api.patch index b5a993c1b94..df3fbdf4ce3 100644 --- a/queue-6.5/wifi-iwlwifi-mvm-change-iwl_mvm_flush_sta-api.patch +++ b/queue-6.5/wifi-iwlwifi-mvm-change-iwl_mvm_flush_sta-api.patch @@ -20,19 +20,17 @@ Signed-off-by: Johannes Berg Stable-dep-of: 43874283ce6c ("wifi: iwlwifi: mvm: fix iwl_mvm_mac_flush_sta()") Signed-off-by: Sasha Levin --- - .../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) { @@ -42,7 +40,7 @@ index eb1fe0082eaf6..069aba0e064aa 100644 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); @@ -52,11 +50,9 @@ index eb1fe0082eaf6..069aba0e064aa 100644 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) @@ -65,11 +61,9 @@ index 524852cf5cd2d..56f51344c193c 100644 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); @@ -78,8 +72,6 @@ index b596eca562166..218f3bc31104b 100644 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, @@ -92,7 +84,7 @@ index 3b9a343d4f672..ebbe165510587 100644 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); @@ -102,7 +94,7 @@ index 3b9a343d4f672..ebbe165510587 100644 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); @@ -112,11 +104,9 @@ index 3b9a343d4f672..ebbe165510587 100644 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); @@ -127,7 +117,7 @@ index ff213247569a7..158266719ffd7 100644 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 */ @@ -137,11 +127,9 @@ index ff213247569a7..158266719ffd7 100644 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; } @@ -168,6 +156,3 @@ index 8158e6d9ef190..8bdb239295c39 100644 - return iwl_mvm_flush_tx_path(mvm, tfd_queue_msk); + return iwl_mvm_flush_tx_path(mvm, tfd_queue_mask); } --- -2.42.0 - diff --git a/queue-6.5/wifi-iwlwifi-use-fw-rate-for-non-data-frames.patch b/queue-6.5/wifi-iwlwifi-use-fw-rate-for-non-data-frames.patch deleted file mode 100644 index 614cdeeea5a..00000000000 --- a/queue-6.5/wifi-iwlwifi-use-fw-rate-for-non-data-frames.patch +++ /dev/null @@ -1,64 +0,0 @@ -From eeabb8fca1131ba6c6bdeb89f9b528e463c47501 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 13 Sep 2023 14:56:45 +0300 -Subject: wifi: iwlwifi: Use FW rate for non-data frames - -From: Miri Korenblit - -[ 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 -Signed-off-by: Gregory Greenman -Link: https://lore.kernel.org/r/20230913145231.6c7e59620ee0.I6eaed3ccdd6dd62b9e664facc484081fc5275843@changeid -Signed-off-by: Johannes Berg -Signed-off-by: Sasha Levin ---- - 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 - diff --git a/queue-6.6/series b/queue-6.6/series index 27bd31bc196..e08e3530231 100644 --- a/queue-6.6/series +++ b/queue-6.6/series @@ -49,7 +49,6 @@ iavf-fix-promiscuous-mode-configuration-flow-message.patch 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 diff --git a/queue-6.6/wifi-iwlwifi-empty-overflow-queue-during-flush.patch b/queue-6.6/wifi-iwlwifi-empty-overflow-queue-during-flush.patch index bf21dd55fb4..3b75a47e525 100644 --- a/queue-6.6/wifi-iwlwifi-empty-overflow-queue-during-flush.patch +++ b/queue-6.6/wifi-iwlwifi-empty-overflow-queue-during-flush.patch @@ -25,15 +25,13 @@ Link: https://lore.kernel.org/r/20231022173519.caf06c8709d9.Ibf664ccb3f952e836f8 Signed-off-by: Johannes Berg Signed-off-by: Sasha Levin --- - 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 @@ @@ -44,7 +42,7 @@ index 60a7b61d59aa3..ca1daec641c4f 100644 *****************************************************************************/ #include -@@ -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); } @@ -53,7 +51,7 @@ index 60a7b61d59aa3..ca1daec641c4f 100644 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, @@ -62,8 +60,6 @@ index 60a7b61d59aa3..ca1daec641c4f 100644 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 { @@ -75,7 +71,7 @@ index 1b3c976d19feb..168eda2132fb8 100644 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, @@ -93,11 +89,9 @@ index 1b3c976d19feb..168eda2132fb8 100644 } 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 */ @@ -106,7 +100,7 @@ index 8bdb239295c39..177a4628a913e 100644 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). */ @@ -115,11 +109,9 @@ index 8bdb239295c39..177a4628a913e 100644 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, @@ -128,7 +120,7 @@ index 340240b8954f6..ca74b1b63cac1 100644 { 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; @@ -141,7 +133,7 @@ index 340240b8954f6..ca74b1b63cac1 100644 /* * 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); @@ -151,11 +143,9 @@ index 340240b8954f6..ca74b1b63cac1 100644 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, @@ -164,6 +154,3 @@ index b7d3808588bfb..4c09bc1930fa1 100644 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 - diff --git a/queue-6.6/wifi-iwlwifi-mvm-change-iwl_mvm_flush_sta-api.patch b/queue-6.6/wifi-iwlwifi-mvm-change-iwl_mvm_flush_sta-api.patch index 6182e06fefd..45bf6eb053b 100644 --- a/queue-6.6/wifi-iwlwifi-mvm-change-iwl_mvm_flush_sta-api.patch +++ b/queue-6.6/wifi-iwlwifi-mvm-change-iwl_mvm_flush_sta-api.patch @@ -20,19 +20,17 @@ Signed-off-by: Johannes Berg Stable-dep-of: 43874283ce6c ("wifi: iwlwifi: mvm: fix iwl_mvm_mac_flush_sta()") Signed-off-by: Sasha Levin --- - .../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) { @@ -42,7 +40,7 @@ index a3058d7c77574..e68026a657059 100644 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); @@ -52,11 +50,9 @@ index a3058d7c77574..e68026a657059 100644 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) @@ -65,11 +61,9 @@ index 524852cf5cd2d..56f51344c193c 100644 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); @@ -78,8 +72,6 @@ index b596eca562166..218f3bc31104b 100644 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, @@ -92,7 +84,7 @@ index 3b9a343d4f672..ebbe165510587 100644 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); @@ -102,7 +94,7 @@ index 3b9a343d4f672..ebbe165510587 100644 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); @@ -112,11 +104,9 @@ index 3b9a343d4f672..ebbe165510587 100644 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); @@ -127,7 +117,7 @@ index ff213247569a7..158266719ffd7 100644 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 */ @@ -137,11 +127,9 @@ index ff213247569a7..158266719ffd7 100644 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; } @@ -168,6 +156,3 @@ index 8158e6d9ef190..8bdb239295c39 100644 - return iwl_mvm_flush_tx_path(mvm, tfd_queue_msk); + return iwl_mvm_flush_tx_path(mvm, tfd_queue_mask); } --- -2.42.0 - diff --git a/queue-6.6/wifi-iwlwifi-use-fw-rate-for-non-data-frames.patch b/queue-6.6/wifi-iwlwifi-use-fw-rate-for-non-data-frames.patch deleted file mode 100644 index c8649ee706d..00000000000 --- a/queue-6.6/wifi-iwlwifi-use-fw-rate-for-non-data-frames.patch +++ /dev/null @@ -1,64 +0,0 @@ -From c4b10f971eb9fd5bf98497d593714976d30c4c29 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 13 Sep 2023 14:56:45 +0300 -Subject: wifi: iwlwifi: Use FW rate for non-data frames - -From: Miri Korenblit - -[ 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 -Signed-off-by: Gregory Greenman -Link: https://lore.kernel.org/r/20230913145231.6c7e59620ee0.I6eaed3ccdd6dd62b9e664facc484081fc5275843@changeid -Signed-off-by: Johannes Berg -Signed-off-by: Sasha Levin ---- - 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 -