[PATCH 60/61] staging: rtl8723bs: inline recv private data freeing helper

From: Arsenii Pashchenko

Date: Wed Jul 15 2026 - 09:13:33 EST


Inline the receive private data freeing logic directly into
rtw_hal_free_recv_priv. This eliminates a redundant redirection layer
for killing the recv tasklet, dropping pending skbs, and freeing
allocated memory buffers during teardown.

Signed-off-by: Arsenii Pashchenko <ulijg308@xxxxxxxxx>
---
.../staging/rtl8723bs/hal/HalBtc8723b2Ant.c | 2 +-
.../staging/rtl8723bs/hal/HalBtc8723b2Ant.h | 1 +
drivers/staging/rtl8723bs/hal/hal_intf.c | 50 ++++++++++++++++++-
drivers/staging/rtl8723bs/hal/rtl8723b_cmd.c | 30 -----------
.../staging/rtl8723bs/hal/rtl8723bs_recv.c | 35 -------------
.../staging/rtl8723bs/include/rtl8723b_cmd.h | 1 -
.../staging/rtl8723bs/include/rtl8723b_recv.h | 1 -
7 files changed, 50 insertions(+), 70 deletions(-)

diff --git a/drivers/staging/rtl8723bs/hal/HalBtc8723b2Ant.c b/drivers/staging/rtl8723bs/hal/HalBtc8723b2Ant.c
index efb0ffd54..bb3ebfe74 100644
--- a/drivers/staging/rtl8723bs/hal/HalBtc8723b2Ant.c
+++ b/drivers/staging/rtl8723bs/hal/HalBtc8723b2Ant.c
@@ -1031,7 +1031,7 @@ static void halbtc8723b2ant_CoexAllOff(struct btc_coexist *pBtCoexist)
halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);
}

-static void halbtc8723b2ant_InitCoexDm(struct btc_coexist *pBtCoexist)
+void halbtc8723b2ant_InitCoexDm(struct btc_coexist *pBtCoexist)
{
/* force to reset coex mechanism */

diff --git a/drivers/staging/rtl8723bs/hal/HalBtc8723b2Ant.h b/drivers/staging/rtl8723bs/hal/HalBtc8723b2Ant.h
index 4043e4e4d..bdb7720a1 100644
--- a/drivers/staging/rtl8723bs/hal/HalBtc8723b2Ant.h
+++ b/drivers/staging/rtl8723bs/hal/HalBtc8723b2Ant.h
@@ -144,3 +144,4 @@ void EXhalbtc8723b2ant_PnpNotify(struct btc_coexist *pBtCoexist, u8 pnpState);
void EXhalbtc8723b2ant_Periodical(struct btc_coexist *pBtCoexist);

void halbtc8723b2ant_InitHwConfig(struct btc_coexist *pBtCoexist);
+void halbtc8723b2ant_InitCoexDm(struct btc_coexist *pBtCoexist);
diff --git a/drivers/staging/rtl8723bs/hal/hal_intf.c b/drivers/staging/rtl8723bs/hal/hal_intf.c
index 3244f121d..9c471d176 100644
--- a/drivers/staging/rtl8723bs/hal/hal_intf.c
+++ b/drivers/staging/rtl8723bs/hal/hal_intf.c
@@ -405,7 +405,30 @@ s32 rtw_hal_init_recv_priv(struct adapter *padapter)

void rtw_hal_free_recv_priv(struct adapter *padapter)
{
- rtl8723bs_free_recv_priv(padapter);
+ u32 i;
+ struct recv_priv *precvpriv;
+ struct recv_buf *precvbuf;
+
+ precvpriv = &padapter->recvpriv;
+
+ /* 3 1. kill tasklet */
+ tasklet_kill(&precvpriv->recv_tasklet);
+
+ /* 3 2. free all recv buffers */
+ precvbuf = (struct recv_buf *)precvpriv->precv_buf;
+ if (precvbuf) {
+ precvpriv->free_recv_buf_queue_cnt = 0;
+ for (i = 0; i < NR_RECVBUFF; i++) {
+ list_del_init(&precvbuf->list);
+ if (precvbuf->pskb)
+ dev_kfree_skb_any(precvbuf->pskb);
+ precvbuf++;
+ }
+ precvpriv->precv_buf = NULL;
+ }
+
+ kfree(precvpriv->pallocated_recv_buf);
+ precvpriv->pallocated_recv_buf = NULL;
}

void rtw_hal_update_ra_mask(struct sta_info *psta, u8 rssi_level)
@@ -427,9 +450,32 @@ void rtw_hal_update_ra_mask(struct sta_info *psta, u8 rssi_level)
}
}

+/* arg[0] = macid */
+/* arg[1] = raid */
+/* arg[2] = shortGIrate */
+/* arg[3] = init_rate */
void rtw_hal_add_ra_tid(struct adapter *padapter, u32 bitmap, u8 *arg, u8 rssi_level)
{
- rtl8723b_Add_RateATid(padapter, bitmap, arg, rssi_level);
+ struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
+ struct sta_info *psta;
+ u8 mac_id = arg[0];
+ u8 raid = arg[1];
+ u8 shortGI = arg[2];
+ u8 bw;
+ u32 mask = bitmap&0x0FFFFFFF;
+
+ psta = pmlmeinfo->FW_sta_info[mac_id].psta;
+ if (!psta)
+ return;
+
+ bw = psta->bw_mode;
+
+ if (rssi_level != DM_RATR_STA_INIT)
+ mask = ODM_Get_Rate_Bitmap(&pHalData->odmpriv, mac_id, mask, rssi_level);
+
+ rtl8723b_set_FwMacIdConfig_cmd(padapter, mac_id, raid, bw, shortGI, mask);
}

u32 rtw_hal_read_bbreg(struct adapter *padapter, u32 RegAddr, u32 BitMask)
diff --git a/drivers/staging/rtl8723bs/hal/rtl8723b_cmd.c b/drivers/staging/rtl8723bs/hal/rtl8723b_cmd.c
index 826a20529..593354e41 100644
--- a/drivers/staging/rtl8723bs/hal/rtl8723b_cmd.c
+++ b/drivers/staging/rtl8723bs/hal/rtl8723b_cmd.c
@@ -697,38 +697,8 @@ void rtl8723b_set_FwJoinBssRpt_cmd(struct adapter *padapter, u8 mstatus)
rtl8723b_download_rsvd_page(padapter, RT_MEDIA_CONNECT);
}

-/* arg[0] = macid */
-/* arg[1] = raid */
-/* arg[2] = shortGIrate */
-/* arg[3] = init_rate */
-void rtl8723b_Add_RateATid(
- struct adapter *padapter,
- u32 bitmap,
- u8 *arg,
- u8 rssi_level
-)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
- struct sta_info *psta;
- u8 mac_id = arg[0];
- u8 raid = arg[1];
- u8 shortGI = arg[2];
- u8 bw;
- u32 mask = bitmap&0x0FFFFFFF;
-
- psta = pmlmeinfo->FW_sta_info[mac_id].psta;
- if (!psta)
- return;

- bw = psta->bw_mode;

- if (rssi_level != DM_RATR_STA_INIT)
- mask = ODM_Get_Rate_Bitmap(&pHalData->odmpriv, mac_id, mask, rssi_level);
-
- rtl8723b_set_FwMacIdConfig_cmd(padapter, mac_id, raid, bw, shortGI, mask);
-}

static void ConstructBtNullFunctionData(
struct adapter *padapter,
diff --git a/drivers/staging/rtl8723bs/hal/rtl8723bs_recv.c b/drivers/staging/rtl8723bs/hal/rtl8723bs_recv.c
index 384c5e643..f9aab253f 100644
--- a/drivers/staging/rtl8723bs/hal/rtl8723bs_recv.c
+++ b/drivers/staging/rtl8723bs/hal/rtl8723bs_recv.c
@@ -356,38 +356,3 @@ void rtl8723bs_recv_tasklet(struct tasklet_struct *t)
rtw_enqueue_recvbuf(precvbuf, &precvpriv->free_recv_buf_queue);
} while (1);
}
-
-
-/*
- * Free recv private variable of hardware dependent
- * 1. recv buf
- * 2. recv tasklet
- *
- */
-void rtl8723bs_free_recv_priv(struct adapter *padapter)
-{
- u32 i;
- struct recv_priv *precvpriv;
- struct recv_buf *precvbuf;
-
- precvpriv = &padapter->recvpriv;
-
- /* 3 1. kill tasklet */
- tasklet_kill(&precvpriv->recv_tasklet);
-
- /* 3 2. free all recv buffers */
- precvbuf = (struct recv_buf *)precvpriv->precv_buf;
- if (precvbuf) {
- precvpriv->free_recv_buf_queue_cnt = 0;
- for (i = 0; i < NR_RECVBUFF; i++) {
- list_del_init(&precvbuf->list);
- if (precvbuf->pskb)
- dev_kfree_skb_any(precvbuf->pskb);
- precvbuf++;
- }
- precvpriv->precv_buf = NULL;
- }
-
- kfree(precvpriv->pallocated_recv_buf);
- precvpriv->pallocated_recv_buf = NULL;
-}
diff --git a/drivers/staging/rtl8723bs/include/rtl8723b_cmd.h b/drivers/staging/rtl8723bs/include/rtl8723b_cmd.h
index 6b2d79e19..df62991c9 100644
--- a/drivers/staging/rtl8723bs/include/rtl8723b_cmd.h
+++ b/drivers/staging/rtl8723bs/include/rtl8723b_cmd.h
@@ -166,7 +166,6 @@ enum {
void rtl8723b_set_FwPwrMode_cmd(struct adapter *padapter, u8 Mode);
void rtl8723b_set_FwJoinBssRpt_cmd(struct adapter *padapter, u8 mstatus);
void rtl8723b_set_rssi_cmd(struct adapter *padapter, u8 *param);
-void rtl8723b_Add_RateATid(struct adapter *padapter, u32 bitmap, u8 *arg, u8 rssi_level);
void rtl8723b_fw_try_ap_cmd(struct adapter *padapter, u32 need_ack);
/* s32 rtl8723b_set_lowpwr_lps_cmd(struct adapter *padapter, u8 enable); */
void rtl8723b_set_FwPsTuneParam_cmd(struct adapter *padapter);
diff --git a/drivers/staging/rtl8723bs/include/rtl8723b_recv.h b/drivers/staging/rtl8723bs/include/rtl8723b_recv.h
index c4c91f5f4..2fc530494 100644
--- a/drivers/staging/rtl8723bs/include/rtl8723b_recv.h
+++ b/drivers/staging/rtl8723bs/include/rtl8723b_recv.h
@@ -82,7 +82,6 @@ struct rxreport_8723b {
};


-void rtl8723bs_free_recv_priv(struct adapter *padapter);

void rtl8723b_query_rx_phy_status(union recv_frame *prframe, struct phy_stat *pphy_stat);
void rtl8723b_process_phy_info(struct adapter *padapter, void *prframe);
--
2.55.0