]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
staging: rtl8723bs: remove thread wraper functions and add IS_ERR() check
authorSamasth Norway Ananda <samasth.norway.ananda@oracle.com>
Fri, 30 Jan 2026 00:16:41 +0000 (16:16 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 7 Feb 2026 12:35:58 +0000 (13:35 +0100)
The rtl8723b_start_thread() and rtl8723b_stop_thread() functions are
wrappers that are only called from one place each. Remove these wrapper
functions and inline the thread handling directly in
rtw_start_drv_threads() and rtw_stop_drv_threads().

This also fixes a bug where kthread_run() was not checked for errors
using IS_ERR(). kthread_run() returns ERR_PTR(-ENOMEM) on failure, not
NULL. Without this check, the SdioXmitThread pointer could contain an
error value, causing issues when rtw_stop_drv_threads() later attempts
to use it.

The inlined code now follows the same pattern as xmitThread and
cmdThread in rtw_start_drv_threads(), with proper IS_ERR() checking.

Suggested-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Samasth Norway Ananda <samasth.norway.ananda@oracle.com>
Link: https://patch.msgid.link/20260130001641.17941-4-samasth.norway.ananda@oracle.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/rtl8723bs/hal/hal_intf.c
drivers/staging/rtl8723bs/hal/rtl8723b_hal_init.c
drivers/staging/rtl8723bs/include/hal_intf.h
drivers/staging/rtl8723bs/include/rtl8723b_hal.h
drivers/staging/rtl8723bs/os_dep/os_intfs.c

index 4ca950ff20ade382ed72348377b16d16da524f1b..27c0c0198714fb69a21801c919c449f39d1c46a6 100644 (file)
@@ -218,17 +218,6 @@ void rtw_hal_add_ra_tid(struct adapter *padapter, u32 bitmap, u8 *arg, u8 rssi_l
        rtl8723b_Add_RateATid(padapter, bitmap, arg, rssi_level);
 }
 
-/*Start specifical interface thread            */
-void rtw_hal_start_thread(struct adapter *padapter)
-{
-       rtl8723b_start_thread(padapter);
-}
-/*Start specifical interface thread            */
-void rtw_hal_stop_thread(struct adapter *padapter)
-{
-       rtl8723b_stop_thread(padapter);
-}
-
 u32 rtw_hal_read_bbreg(struct adapter *padapter, u32 RegAddr, u32 BitMask)
 {
        return PHY_QueryBBReg_8723B(padapter, RegAddr, BitMask);
index 528bc05169dedf71feb9eb48a3f1f60cd322d1bb..3a8062d31175ef56bababb2e6ef715df6b8fc545 100644 (file)
@@ -2916,22 +2916,3 @@ u8 GetHalDefVar8723B(struct adapter *padapter, enum hal_def_variable variable, v
 
        return bResult;
 }
-
-void rtl8723b_start_thread(struct adapter *padapter)
-{
-       struct xmit_priv *xmitpriv = &padapter->xmitpriv;
-
-       xmitpriv->SdioXmitThread = kthread_run(rtl8723bs_xmit_thread, padapter, "RTWHALXT");
-}
-
-void rtl8723b_stop_thread(struct adapter *padapter)
-{
-       struct xmit_priv *xmitpriv = &padapter->xmitpriv;
-
-       /*  stop xmit_buf_thread */
-       if (xmitpriv->SdioXmitThread) {
-               complete(&xmitpriv->SdioXmitStart);
-               wait_for_completion(&xmitpriv->SdioXmitTerminate);
-               xmitpriv->SdioXmitThread = NULL;
-       }
-}
index 82b60899129d078009bffde5fef3043fc638d902..b193854bfe6e928efc45e7e92de29b8dbf94e4b1 100644 (file)
@@ -221,9 +221,6 @@ void rtw_hal_free_recv_priv(struct adapter *padapter);
 void rtw_hal_update_ra_mask(struct sta_info *psta, u8 rssi_level);
 void rtw_hal_add_ra_tid(struct adapter *padapter, u32 bitmap, u8 *arg, u8 rssi_level);
 
-void rtw_hal_start_thread(struct adapter *padapter);
-void rtw_hal_stop_thread(struct adapter *padapter);
-
 void beacon_timing_control(struct adapter *padapter);
 
 u32 rtw_hal_read_bbreg(struct adapter *padapter, u32 RegAddr, u32 BitMask);
index 06e0a549fa9d93d5787ece93b5b7d99e6f9e1268..7ec84304a19e958532ee5d916e0117504ce4f778 100644 (file)
@@ -231,9 +231,6 @@ void rtl8723b_InitBeaconParameters(struct adapter *padapter);
 void _InitBurstPktLen_8723BS(struct adapter *adapter);
 void _8051Reset8723(struct adapter *padapter);
 
-void rtl8723b_start_thread(struct adapter *padapter);
-void rtl8723b_stop_thread(struct adapter *padapter);
-
 int FirmwareDownloadBT(struct adapter *adapter, struct rt_firmware *firmware);
 
 void CCX_FwC2HTxRpt_8723b(struct adapter *padapter, u8 *pdata, u8 len);
index f7f23d1b17095cdc38f3f45668a0fd1d9187b30d..574d06fec898f5d1441486da154400eba5e1ad82 100644 (file)
@@ -6,6 +6,7 @@
  ******************************************************************************/
 #include <drv_types.h>
 #include <hal_data.h>
+#include <rtl8723b_xmit.h>
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("Realtek Wireless Lan Driver");
@@ -477,7 +478,13 @@ u32 rtw_start_drv_threads(struct adapter *padapter)
        else
                wait_for_completion(&padapter->cmdpriv.terminate_cmdthread_comp); /* wait for cmd_thread to run */
 
-       rtw_hal_start_thread(padapter);
+       padapter->xmitpriv.SdioXmitThread = kthread_run(rtl8723bs_xmit_thread,
+                                                       padapter, "RTWHALXT");
+       if (IS_ERR(padapter->xmitpriv.SdioXmitThread)) {
+               padapter->xmitpriv.SdioXmitThread = NULL;
+               _status = _FAIL;
+       }
+
        return _status;
 }
 
@@ -489,7 +496,12 @@ void rtw_stop_drv_threads(struct adapter *padapter)
        complete(&padapter->xmitpriv.xmit_comp);
        wait_for_completion(&padapter->xmitpriv.terminate_xmitthread_comp);
 
-       rtw_hal_stop_thread(padapter);
+       /* stop SdioXmitThread */
+       if (padapter->xmitpriv.SdioXmitThread) {
+               complete(&padapter->xmitpriv.SdioXmitStart);
+               wait_for_completion(&padapter->xmitpriv.SdioXmitTerminate);
+               padapter->xmitpriv.SdioXmitThread = NULL;
+       }
 }
 
 static void rtw_init_default_value(struct adapter *padapter)