mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-27 17:18:59 +00:00
b33bfcf9fa
Synchronize the ath11k backports with the current ath-next tree. All of the changes are various bugfixes, there is no new major feature. Signed-off-by: Robert Marko <robimarko@gmail.com>
52 lines
1.9 KiB
Diff
52 lines
1.9 KiB
Diff
From 29d15589f084d71a4ea8c544039c5839db0236e2 Mon Sep 17 00:00:00 2001
|
|
From: Sven Eckelmann <sven@narfation.org>
|
|
Date: Tue, 22 Aug 2023 16:42:24 +0300
|
|
Subject: [PATCH] wifi: ath11k: Cleanup mac80211 references on failure during
|
|
tx_complete
|
|
|
|
When a function is using functions from mac80211 to free an skb then it
|
|
should do it consistently and not switch to the generic dev_kfree_skb_any
|
|
(or similar functions). Otherwise (like in the error handlers), mac80211
|
|
will will not be aware of the freed skb and thus not clean up related
|
|
information in its internal data structures.
|
|
|
|
Not doing so lead in the past to filled up structure which then prevented
|
|
new clients to connect.
|
|
|
|
Fixes: d5c65159f289 ("ath11k: driver for Qualcomm IEEE 802.11ax devices")
|
|
Fixes: 6257c702264c ("wifi: ath11k: fix tx status reporting in encap offload mode")
|
|
Cc: stable@vger.kernel.org
|
|
Signed-off-by: Sven Eckelmann <sven@narfation.org>
|
|
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
|
Link: https://lore.kernel.org/r/20230802-ath11k-ack_status_leak-v2-2-c0af729d6229@narfation.org
|
|
---
|
|
drivers/net/wireless/ath/ath11k/dp_tx.c | 6 +++---
|
|
1 file changed, 3 insertions(+), 3 deletions(-)
|
|
|
|
--- a/drivers/net/wireless/ath/ath11k/dp_tx.c
|
|
+++ b/drivers/net/wireless/ath/ath11k/dp_tx.c
|
|
@@ -344,7 +344,7 @@ ath11k_dp_tx_htt_tx_complete_buf(struct
|
|
dma_unmap_single(ab->dev, skb_cb->paddr, msdu->len, DMA_TO_DEVICE);
|
|
|
|
if (!skb_cb->vif) {
|
|
- dev_kfree_skb_any(msdu);
|
|
+ ieee80211_free_txskb(ar->hw, msdu);
|
|
return;
|
|
}
|
|
|
|
@@ -566,12 +566,12 @@ static void ath11k_dp_tx_complete_msdu(s
|
|
dma_unmap_single(ab->dev, skb_cb->paddr, msdu->len, DMA_TO_DEVICE);
|
|
|
|
if (unlikely(!rcu_access_pointer(ab->pdevs_active[ar->pdev_idx]))) {
|
|
- dev_kfree_skb_any(msdu);
|
|
+ ieee80211_free_txskb(ar->hw, msdu);
|
|
return;
|
|
}
|
|
|
|
if (unlikely(!skb_cb->vif)) {
|
|
- dev_kfree_skb_any(msdu);
|
|
+ ieee80211_free_txskb(ar->hw, msdu);
|
|
return;
|
|
}
|
|
|