summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFedor Pchelkin <pchelkin@ispras.ru>2025-11-04 16:57:10 +0300
committerPing-Ke Shih <pkshih@realtek.com>2025-11-06 09:28:34 +0300
commit45a6a88f011fc57ba8518f4d032cc2b4f6543c12 (patch)
tree4a536e9846b19cd21caa51cf24b54ca7c0beb72c
parent7543818e97d5d54b3b2f75f1c4dedee298d7d914 (diff)
downloadlinux-45a6a88f011fc57ba8518f4d032cc2b4f6543c12.tar.xz
wifi: rtw89: usb: use ieee80211_free_txskb() where appropriate
rtw89_usb_ops_tx_kick_off() may need to release skb if a failure occurs. It operates mainly on skbs coming from the core wireless stack and the ones containing firmware commands. Use ieee80211_free_txskb() for the former case. Suggested-by: Ping-Ke Shih <pkshih@realtek.com> Acked-by: Ping-Ke Shih <pkshih@realtek.com> Signed-off-by: Fedor Pchelkin <pchelkin@ispras.ru> Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Link: https://patch.msgid.link/20251104135720.321110-4-pchelkin@ispras.ru
-rw-r--r--drivers/net/wireless/realtek/rtw89/usb.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/drivers/net/wireless/realtek/rtw89/usb.c b/drivers/net/wireless/realtek/rtw89/usb.c
index 639b84ebe942..59cdee54feef 100644
--- a/drivers/net/wireless/realtek/rtw89/usb.c
+++ b/drivers/net/wireless/realtek/rtw89/usb.c
@@ -258,6 +258,15 @@ static int rtw89_usb_write_port(struct rtw89_dev *rtwdev, u8 ch_dma,
return ret;
}
+static void rtw89_usb_tx_free_skb(struct rtw89_dev *rtwdev, u8 txch,
+ struct sk_buff *skb)
+{
+ if (txch == RTW89_TXCH_CH12)
+ dev_kfree_skb_any(skb);
+ else
+ ieee80211_free_txskb(rtwdev->hw, skb);
+}
+
static void rtw89_usb_ops_tx_kick_off(struct rtw89_dev *rtwdev, u8 txch)
{
struct rtw89_usb *rtwusb = rtw89_usb_priv(rtwdev);
@@ -272,7 +281,7 @@ static void rtw89_usb_ops_tx_kick_off(struct rtw89_dev *rtwdev, u8 txch)
txcb = kmalloc(sizeof(*txcb), GFP_ATOMIC);
if (!txcb) {
- dev_kfree_skb_any(skb);
+ rtw89_usb_tx_free_skb(rtwdev, txch, skb);
continue;
}
@@ -291,7 +300,7 @@ static void rtw89_usb_ops_tx_kick_off(struct rtw89_dev *rtwdev, u8 txch)
skb_dequeue(&txcb->tx_ack_queue);
kfree(txcb);
- dev_kfree_skb_any(skb);
+ rtw89_usb_tx_free_skb(rtwdev, txch, skb);
}
}
}