[PATCH] wifi: rtw89: fw: propagate real error code in rtw89_fw_h2c_add_general_pkt()

From: Gongwei Li

Date: Tue Sep 01 2026 - 05:37:58 EST


From: Gongwei Li <ligongwei@xxxxxxxxxx>

The error path of rtw89_fw_h2c_add_general_pkt() returns -ENOMEM
unconditionally, which masks the real reason of a failure. In
particular:

* rtw89_fw_h2c_add_pkt_offload() can fail with -ENOSPC when no more
packet offload slot is available, or with the error of H2C TX, but
the callers only see -ENOMEM and get misled when debugging.

* For an unsupported type, the switch default case returns -ENOMEM,
which is misleading and should be -EINVAL.

Return a real error code instead of -ENOMEM, and use -EINVAL for
unsupported types.

Fixes: 5c12bb66b79d ("wifi: rtw89: refine packet offload flow")
Signed-off-by: Gongwei Li <ligongwei@xxxxxxxxxx>
---
drivers/net/wireless/realtek/rtw89/fw.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/realtek/rtw89/fw.c b/drivers/net/wireless/realtek/rtw89/fw.c
index d6a594b75ab2..ab2d0b0cb1e5 100644
--- a/drivers/net/wireless/realtek/rtw89/fw.c
+++ b/drivers/net/wireless/realtek/rtw89/fw.c
@@ -3013,11 +3013,14 @@ static int rtw89_fw_h2c_add_general_pkt(struct rtw89_dev *rtwdev,
skb = rtw89_arp_response_get(rtwdev, rtwvif_link);
break;
default:
+ ret = -EINVAL;
goto err;
}

- if (!skb)
+ if (!skb) {
+ ret = -ENOMEM;
goto err;
+ }

ret = rtw89_fw_h2c_add_pkt_offload(rtwdev, &info->id, skb);
kfree_skb(skb);
@@ -3031,7 +3034,7 @@ static int rtw89_fw_h2c_add_general_pkt(struct rtw89_dev *rtwdev,

err:
kfree(info);
- return -ENOMEM;
+ return ret;
}

void rtw89_fw_release_general_pkt_list_vif(struct rtw89_dev *rtwdev,

--

2.25.1