mirror of
https://github.com/torvalds/linux.git
synced 2024-12-02 00:51:44 +00:00
wifi: rtw89: fix potential wrong mapping for pkt-offload
When driver fails to send H2C to firmware for pkt-offload, we should not update the pkt_list of driver, and need to release allocated pkt index to avoid wrong mapping between driver and firmware. Signed-off-by: Chin-Yen Lee <timlee@realtek.com> Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Signed-off-by: Kalle Valo <kvalo@kernel.org> Link: https://lore.kernel.org/r/20230123065401.14174-2-pkshih@realtek.com
This commit is contained in:
parent
d881d0a13c
commit
b8e8ff842b
@ -948,13 +948,13 @@ static int rtw89_fw_h2c_add_wow_fw_ofld(struct rtw89_dev *rtwdev,
|
||||
if (!skb)
|
||||
goto err;
|
||||
|
||||
list_add_tail(&info->list, &rtw_wow->pkt_list);
|
||||
ret = rtw89_fw_h2c_add_pkt_offload(rtwdev, &info->id, skb);
|
||||
kfree_skb(skb);
|
||||
|
||||
if (ret)
|
||||
return ret;
|
||||
goto err;
|
||||
|
||||
list_add_tail(&info->list, &rtw_wow->pkt_list);
|
||||
*id = info->id;
|
||||
return 0;
|
||||
|
||||
@ -2133,6 +2133,7 @@ int rtw89_fw_h2c_add_pkt_offload(struct rtw89_dev *rtwdev, u8 *id,
|
||||
skb = rtw89_fw_h2c_alloc_skb_with_hdr(rtwdev, H2C_LEN_PKT_OFLD + skb_ofld->len);
|
||||
if (!skb) {
|
||||
rtw89_err(rtwdev, "failed to alloc skb for h2c pkt offload\n");
|
||||
rtw89_core_release_bit_map(rtwdev->pkt_offload, alloc_id);
|
||||
return -ENOMEM;
|
||||
}
|
||||
skb_put(skb, H2C_LEN_PKT_OFLD);
|
||||
@ -2151,6 +2152,7 @@ int rtw89_fw_h2c_add_pkt_offload(struct rtw89_dev *rtwdev, u8 *id,
|
||||
ret = rtw89_h2c_tx(rtwdev, skb, false);
|
||||
if (ret) {
|
||||
rtw89_err(rtwdev, "failed to send h2c\n");
|
||||
rtw89_core_release_bit_map(rtwdev->pkt_offload, alloc_id);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
@ -2684,13 +2686,14 @@ static int rtw89_append_probe_req_ie(struct rtw89_dev *rtwdev,
|
||||
goto out;
|
||||
}
|
||||
|
||||
list_add_tail(&info->list, &scan_info->pkt_list[band]);
|
||||
ret = rtw89_fw_h2c_add_pkt_offload(rtwdev, &info->id, new);
|
||||
if (ret) {
|
||||
kfree_skb(new);
|
||||
kfree(info);
|
||||
goto out;
|
||||
}
|
||||
|
||||
list_add_tail(&info->list, &scan_info->pkt_list[band]);
|
||||
kfree_skb(new);
|
||||
}
|
||||
out:
|
||||
|
Loading…
Reference in New Issue
Block a user