* [PATCH] staging: rtl8723bs: Use guards for mutexes
@ 2026-09-19 17:24 Omer PALA
2026-09-20 5:16 ` Greg Kroah-Hartman
0 siblings, 1 reply; 2+ messages in thread
From: Omer PALA @ 2026-09-19 17:24 UTC (permalink / raw)
To: Greg Kroah-Hartman, open list:STAGING SUBSYSTEM, open list
Cc: open list:STAGING SUBSYSTEM, open list
Simplify lock management across the rtl8723bs driver by replacing
manual spinlock and mutex acquire/release calls with scope-based
cleanup guards (guard() and scoped_guard()).
This reduces boilerplate code, removes redundant error-path unlock
logic, and prevents potential lock leaks on early return statements.
Signed-off-by: Omer PALA <palaomer100@gmail.com>
---
drivers/staging/rtl8723bs/core/rtw_ap.c | 18 +--
drivers/staging/rtl8723bs/core/rtw_cmd.c | 23 ++-
.../staging/rtl8723bs/core/rtw_ioctl_set.c | 127 ++++++----------
drivers/staging/rtl8723bs/core/rtw_mlme.c | 3 +-
drivers/staging/rtl8723bs/core/rtw_mlme_ext.c | 3 +-
drivers/staging/rtl8723bs/core/rtw_pwrctrl.c | 143 +++++++-----------
.../staging/rtl8723bs/core/rtw_wlan_util.c | 30 ++--
7 files changed, 139 insertions(+), 208 deletions(-)
diff --git a/drivers/staging/rtl8723bs/core/rtw_ap.c b/drivers/staging/rtl8723bs/core/rtw_ap.c
index 4728f62a1..0ca2fecdc 100644
--- a/drivers/staging/rtl8723bs/core/rtw_ap.c
+++ b/drivers/staging/rtl8723bs/core/rtw_ap.c
@@ -1912,20 +1912,20 @@ void stop_ap_mode(struct adapter *padapter)
padapter->securitypriv.ndisencryptstatus = Ndis802_11WEPDisabled;
/* for ACL */
- spin_lock_bh(&pacl_node_q->lock);
- phead = get_list_head(pacl_node_q);
- list_for_each_safe(plist, tmp, phead) {
- paclnode = list_entry(plist, struct rtw_wlan_acl_node, list);
+ scoped_guard(spinlock_bh, &pacl_node_q->lock) {
+ phead = get_list_head(pacl_node_q);
+ list_for_each_safe(plist, tmp, phead) {
+ paclnode = list_entry(plist, struct rtw_wlan_acl_node, list);
- if (paclnode->valid) {
- paclnode->valid = false;
+ if (paclnode->valid) {
+ paclnode->valid = false;
- list_del_init(&paclnode->list);
+ list_del_init(&paclnode->list);
- pacl_list->num--;
+ pacl_list->num--;
+ }
}
}
- spin_unlock_bh(&pacl_node_q->lock);
rtw_sta_flush(padapter);
diff --git a/drivers/staging/rtl8723bs/core/rtw_cmd.c b/drivers/staging/rtl8723bs/core/rtw_cmd.c
index ce3dfa1fe..1894e447a 100644
--- a/drivers/staging/rtl8723bs/core/rtw_cmd.c
+++ b/drivers/staging/rtl8723bs/core/rtw_cmd.c
@@ -460,8 +460,7 @@ int rtw_cmd_thread(void *context)
cmd_hdl = NULL;
post_process:
-
- if (mutex_lock_interruptible(&pcmd->padapter->cmdpriv.sctx_mutex) == 0) {
+ scoped_cond_guard(mutex_intr, (void)0, &pcmd->padapter->cmdpriv.sctx_mutex) {
if (pcmd->sctx) {
netdev_dbg(padapter->pnetdev,
FUNC_ADPT_FMT " pcmd->sctx\n",
@@ -472,7 +471,6 @@ int rtw_cmd_thread(void *context)
else
rtw_sctx_done_err(&pcmd->sctx, RTW_SCTX_DONE_CMD_ERROR);
}
- mutex_unlock(&pcmd->padapter->cmdpriv.sctx_mutex);
}
/* call callback function for post-processed */
@@ -655,10 +653,9 @@ int rtw_startbss_cmd(struct adapter *padapter, int flags)
if (res == _SUCCESS && (flags & RTW_CMDF_WAIT_ACK)) {
rtw_sctx_wait(&sctx);
- if (mutex_lock_interruptible(&pcmdpriv->sctx_mutex) == 0) {
+ scoped_cond_guard(mutex_intr, (void)0, &pcmdpriv->sctx_mutex) {
if (sctx.status == RTW_SCTX_SUBMITTED)
pcmd->sctx = NULL;
- mutex_unlock(&pcmdpriv->sctx_mutex);
}
}
}
@@ -1406,7 +1403,7 @@ static void rtw_lps_change_dtim_hdl(struct adapter *padapter, u8 dtim)
if (hal_btcoex_IsBtControlLps(padapter))
return;
- mutex_lock(&pwrpriv->lock);
+ guard(mutex)(&pwrpriv->lock);
pwrpriv->dtim = dtim;
@@ -1415,8 +1412,6 @@ static void rtw_lps_change_dtim_hdl(struct adapter *padapter, u8 dtim)
rtw_hal_set_hwreg(padapter, HW_VAR_H2C_FW_PWRMODE, (u8 *)(&ps_mode));
}
-
- mutex_unlock(&pwrpriv->lock);
}
static void rtw_dm_ra_mask_hdl(struct adapter *padapter, struct sta_info *psta)
@@ -1923,13 +1918,13 @@ void rtw_setassocsta_cmdrsp_callback(struct adapter *padapter, struct cmd_obj *
psta->aid = passocsta_rsp->cam_id;
psta->mac_id = passocsta_rsp->cam_id;
- spin_lock_bh(&pmlmepriv->lock);
-
- if (check_fwstate(pmlmepriv, WIFI_MP_STATE) && check_fwstate(pmlmepriv, _FW_UNDER_LINKING))
- _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING);
+ scoped_guard(spinlock_bh, &pmlmepriv->lock) {
+ if (check_fwstate(pmlmepriv, WIFI_MP_STATE) &&
+ check_fwstate(pmlmepriv, _FW_UNDER_LINKING))
+ _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING);
- set_fwstate(pmlmepriv, _FW_LINKED);
- spin_unlock_bh(&pmlmepriv->lock);
+ set_fwstate(pmlmepriv, _FW_LINKED);
+ }
exit:
rtw_free_cmd_obj(pcmd);
diff --git a/drivers/staging/rtl8723bs/core/rtw_ioctl_set.c b/drivers/staging/rtl8723bs/core/rtw_ioctl_set.c
index 2739d0e99..5a695e973 100644
--- a/drivers/staging/rtl8723bs/core/rtw_ioctl_set.c
+++ b/drivers/staging/rtl8723bs/core/rtw_ioctl_set.c
@@ -129,25 +129,28 @@ u8 rtw_do_join(struct adapter *padapter)
u8 rtw_set_802_11_ssid(struct adapter *padapter, struct ndis_802_11_ssid *ssid)
{
- u8 status = _SUCCESS;
+ struct mlme_priv *pmlmepriv;
+ struct wlan_network *pnetwork;
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct wlan_network *pnetwork = &pmlmepriv->cur_network;
+ if (!padapter || !ssid || !rtw_validate_ssid(ssid))
+ return _FAIL;
+
+ if (!padapter->hw_init_completed)
+ return _FAIL;
+
+ pmlmepriv = &padapter->mlmepriv;
+ pnetwork = &pmlmepriv->cur_network;
netdev_dbg(padapter->pnetdev, "set ssid [%s] fw_state = 0x%08x\n",
ssid->ssid, get_fwstate(pmlmepriv));
- if (!padapter->hw_init_completed) {
- status = _FAIL;
- goto exit;
- }
-
- spin_lock_bh(&pmlmepriv->lock);
+ guard(spinlock_bh)(&pmlmepriv->lock);
if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY))
goto handle_tkip_countermeasure;
- else if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING))
- goto release_mlme_lock;
+
+ if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING))
+ return _SUCCESS;
if (check_fwstate(pmlmepriv, _FW_LINKED | WIFI_ADHOC_MASTER_STATE)) {
if ((pmlmepriv->assoc_ssid.ssid_length == ssid->ssid_length) &&
@@ -167,7 +170,11 @@ u8 rtw_set_802_11_ssid(struct adapter *padapter, struct ndis_802_11_ssid *ssid)
set_fwstate(pmlmepriv, WIFI_ADHOC_STATE);
}
} else {
- goto release_mlme_lock;/* it means driver is in WIFI_ADHOC_MASTER_STATE, we needn't create bss again. */
+ return _SUCCESS;
+ /*
+ * it means driver is in WIFI_ADHOC_MASTER_STATE,
+ * we needn't create bss again.
+ */
}
} else {
rtw_lps_ctrl_wk_cmd(padapter, LPS_CTRL_JOINBSS, 1);
@@ -188,30 +195,18 @@ u8 rtw_set_802_11_ssid(struct adapter *padapter, struct ndis_802_11_ssid *ssid)
}
handle_tkip_countermeasure:
- if (rtw_handle_tkip_countermeasure(padapter, __func__) == _FAIL) {
- status = _FAIL;
- goto release_mlme_lock;
- }
-
- if (!rtw_validate_ssid(ssid)) {
- status = _FAIL;
- goto release_mlme_lock;
- }
+ if (rtw_handle_tkip_countermeasure(padapter, __func__) == _FAIL)
+ return _FAIL;
memcpy(&pmlmepriv->assoc_ssid, ssid, sizeof(struct ndis_802_11_ssid));
pmlmepriv->assoc_by_bssid = false;
- if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY))
+ if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY)) {
pmlmepriv->to_join = true;
- else
- status = rtw_do_join(padapter);
-
-release_mlme_lock:
- spin_unlock_bh(&pmlmepriv->lock);
-
-exit:
+ return _SUCCESS;
+ }
- return status;
+ return rtw_do_join(padapter);
}
u8 rtw_set_802_11_connect(struct adapter *padapter, u8 *bssid, struct ndis_802_11_ssid *ssid)
@@ -219,7 +214,7 @@ u8 rtw_set_802_11_connect(struct adapter *padapter, u8 *bssid, struct ndis_802_1
u8 status = _SUCCESS;
bool bssid_valid = true;
bool ssid_valid = true;
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+ struct mlme_priv *pmlmepriv;
if (!ssid || !rtw_validate_ssid(ssid))
ssid_valid = false;
@@ -227,30 +222,25 @@ u8 rtw_set_802_11_connect(struct adapter *padapter, u8 *bssid, struct ndis_802_1
if (!bssid || !rtw_validate_bssid(bssid))
bssid_valid = false;
- if (!ssid_valid && !bssid_valid) {
- status = _FAIL;
- goto exit;
- }
+ if (!ssid_valid && !bssid_valid)
+ return _FAIL;
- if (!padapter->hw_init_completed) {
- status = _FAIL;
- goto exit;
- }
+ if (!padapter || !padapter->hw_init_completed)
+ return _FAIL;
+
+ pmlmepriv = &padapter->mlmepriv;
- spin_lock_bh(&pmlmepriv->lock);
+ guard(spinlock_bh)(&pmlmepriv->lock);
netdev_dbg(padapter->pnetdev, FUNC_ADPT_FMT " fw_state = 0x%08x\n",
FUNC_ADPT_ARG(padapter), get_fwstate(pmlmepriv));
- if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY))
- goto handle_tkip_countermeasure;
- else if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING))
- goto release_mlme_lock;
+ if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING))
+ return status;
-handle_tkip_countermeasure:
if (rtw_handle_tkip_countermeasure(padapter, __func__) == _FAIL) {
status = _FAIL;
- goto release_mlme_lock;
+ return status;
}
if (ssid && ssid_valid)
@@ -270,10 +260,6 @@ u8 rtw_set_802_11_connect(struct adapter *padapter, u8 *bssid, struct ndis_802_1
else
status = rtw_do_join(padapter);
-release_mlme_lock:
- spin_unlock_bh(&pmlmepriv->lock);
-
-exit:
return status;
}
@@ -292,7 +278,7 @@ u8 rtw_set_802_11_infrastructure_mode(struct adapter *padapter,
stop_ap_mode(padapter);
}
- spin_lock_bh(&pmlmepriv->lock);
+ guard(spinlock_bh)(&pmlmepriv->lock);
if (check_fwstate(pmlmepriv, _FW_LINKED) || (*pold_state == NL80211_IFTYPE_ADHOC))
rtw_disassoc_cmd(padapter, 0, true);
@@ -331,8 +317,6 @@ u8 rtw_set_802_11_infrastructure_mode(struct adapter *padapter,
}
/* SecClearAllKeys(adapter); */
-
- spin_unlock_bh(&pmlmepriv->lock);
}
return true;
}
@@ -341,7 +325,7 @@ u8 rtw_set_802_11_disassociate(struct adapter *padapter)
{
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- spin_lock_bh(&pmlmepriv->lock);
+ guard(spinlock_bh)(&pmlmepriv->lock);
if (check_fwstate(pmlmepriv, _FW_LINKED)) {
rtw_disassoc_cmd(padapter, 0, true);
@@ -350,43 +334,30 @@ u8 rtw_set_802_11_disassociate(struct adapter *padapter)
rtw_pwr_wakeup(padapter);
}
- spin_unlock_bh(&pmlmepriv->lock);
-
return true;
}
u8 rtw_set_802_11_bssid_list_scan(struct adapter *padapter, struct ndis_802_11_ssid *pssid, int ssid_max_num)
{
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- u8 res = true;
+ struct mlme_priv *pmlmepriv;
- if (!padapter) {
- res = false;
- goto exit;
- }
- if (!padapter->hw_init_completed) {
- res = false;
- goto exit;
- }
+ if (!padapter || !padapter->hw_init_completed)
+ return false;
+
+ pmlmepriv = &padapter->mlmepriv;
if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY | _FW_UNDER_LINKING) ||
pmlmepriv->link_detect_info.busy_traffic) {
/* Scan or linking is in progress, do nothing. */
- res = true;
-
- } else {
- if (rtw_is_scan_deny(padapter))
- return _SUCCESS;
-
- spin_lock_bh(&pmlmepriv->lock);
+ return true;
+ }
- res = rtw_sitesurvey_cmd(padapter, pssid, ssid_max_num, NULL, 0);
+ if (rtw_is_scan_deny(padapter))
+ return _SUCCESS;
- spin_unlock_bh(&pmlmepriv->lock);
- }
-exit:
+ guard(spinlock_bh)(&pmlmepriv->lock);
- return res;
+ return rtw_sitesurvey_cmd(padapter, pssid, ssid_max_num, NULL, 0);
}
u8 rtw_set_802_11_authentication_mode(struct adapter *padapter, enum ndis_802_11_authentication_mode authmode)
diff --git a/drivers/staging/rtl8723bs/core/rtw_mlme.c b/drivers/staging/rtl8723bs/core/rtw_mlme.c
index d18768a51..52b155a35 100644
--- a/drivers/staging/rtl8723bs/core/rtw_mlme.c
+++ b/drivers/staging/rtl8723bs/core/rtw_mlme.c
@@ -1086,7 +1086,7 @@ void rtw_reset_securitypriv(struct adapter *adapter)
u32 backupTKIPcountermeasure_time = 0;
struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
- spin_lock_bh(&adapter->security_key_mutex);
+ guard(spinlock_bh)(&adapter->security_key_mutex);
if (adapter->securitypriv.dot11_auth_algrthm == dot11_auth_algrthm_8021x) {
/* 802.1x */
@@ -1133,7 +1133,6 @@ void rtw_reset_securitypriv(struct adapter *adapter)
psec_priv->ndisencryptstatus = Ndis802_11WEPDisabled;
/* */
}
- spin_unlock_bh(&adapter->security_key_mutex);
}
/* Notes: the function could be > passive_level (the same context as Rx tasklet) */
diff --git a/drivers/staging/rtl8723bs/core/rtw_mlme_ext.c b/drivers/staging/rtl8723bs/core/rtw_mlme_ext.c
index e965133d9..7e499b17d 100644
--- a/drivers/staging/rtl8723bs/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8723bs/core/rtw_mlme_ext.c
@@ -2015,7 +2015,7 @@ s32 dump_mgntframe_and_wait_ack(struct adapter *padapter, struct xmit_frame *pmg
return -1;
}
- if (mutex_lock_interruptible(&pxmitpriv->ack_tx_mutex) == 0) {
+ scoped_cond_guard(mutex_intr, (void)0, &pxmitpriv->ack_tx_mutex) {
pxmitpriv->ack_tx = true;
pxmitpriv->seq_no = seq_no++;
pmgntframe->ack_report = 1;
@@ -2023,7 +2023,6 @@ s32 dump_mgntframe_and_wait_ack(struct adapter *padapter, struct xmit_frame *pmg
ret = rtw_ack_tx_wait(pxmitpriv, timeout_ms);
pxmitpriv->ack_tx = false;
- mutex_unlock(&pxmitpriv->ack_tx_mutex);
}
return ret;
diff --git a/drivers/staging/rtl8723bs/core/rtw_pwrctrl.c b/drivers/staging/rtl8723bs/core/rtw_pwrctrl.c
index 448611ad8..547fa05ef 100644
--- a/drivers/staging/rtl8723bs/core/rtw_pwrctrl.c
+++ b/drivers/staging/rtl8723bs/core/rtw_pwrctrl.c
@@ -37,9 +37,8 @@ void ips_enter(struct adapter *padapter)
hal_btcoex_IpsNotify(padapter, pwrpriv->ips_mode_req);
- mutex_lock(&pwrpriv->lock);
+ guard(mutex)(&pwrpriv->lock);
_ips_enter(padapter);
- mutex_unlock(&pwrpriv->lock);
}
int _ips_leave(struct adapter *padapter)
@@ -69,9 +68,9 @@ int ips_leave(struct adapter *padapter)
struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
int ret;
- mutex_lock(&pwrpriv->lock);
- ret = _ips_leave(padapter);
- mutex_unlock(&pwrpriv->lock);
+ scoped_guard(mutex, &pwrpriv->lock) {
+ ret = _ips_leave(padapter);
+ }
if (ret == _SUCCESS)
hal_btcoex_IpsNotify(padapter, IPS_NONE);
@@ -138,9 +137,10 @@ void rtw_ps_processor(struct adapter *padapter)
struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
u32 ps_deny = 0;
- mutex_lock(&adapter_to_pwrctl(padapter)->lock);
- ps_deny = rtw_ps_deny_get(padapter);
- mutex_unlock(&adapter_to_pwrctl(padapter)->lock);
+ scoped_guard(mutex, &adapter_to_pwrctl(padapter)->lock) {
+ ps_deny = rtw_ps_deny_get(padapter);
+ }
+
if (ps_deny != 0)
goto exit;
@@ -337,7 +337,7 @@ void rtw_set_ps_mode(struct adapter *padapter, u8 ps_mode,
if (ps_mode == PS_MODE_ACTIVE)
return;
- mutex_lock(&pwrpriv->lock);
+ guard(mutex)(&pwrpriv->lock);
/* if (pwrpriv->pwr_mode == PS_MODE_ACTIVE) */
if (ps_mode == PS_MODE_ACTIVE) {
@@ -383,8 +383,6 @@ void rtw_set_ps_mode(struct adapter *padapter, u8 ps_mode,
rtw_set_rpwm(padapter, pslv);
}
}
-
- mutex_unlock(&pwrpriv->lock);
}
/*
@@ -488,11 +486,9 @@ void LeaveAllPowerSaveModeDirect(struct adapter *Adapter)
if (pwrpriv->pwr_mode == PS_MODE_ACTIVE)
return;
- mutex_lock(&pwrpriv->lock);
-
- rtw_set_rpwm(Adapter, PS_STATE_S4);
-
- mutex_unlock(&pwrpriv->lock);
+ scoped_guard(mutex, &pwrpriv->lock) {
+ rtw_set_rpwm(Adapter, PS_STATE_S4);
+ }
rtw_lps_ctrl_wk_cmd(pri_padapter, LPS_CTRL_LEAVE, 0);
} else {
@@ -546,14 +542,12 @@ void LPS_Leave_check(struct adapter *padapter)
cond_resched();
while (1) {
- mutex_lock(&pwrpriv->lock);
-
- if (padapter->bSurpriseRemoved ||
- !(padapter->hw_init_completed) ||
- (pwrpriv->pwr_mode == PS_MODE_ACTIVE))
- bReady = true;
-
- mutex_unlock(&pwrpriv->lock);
+ scoped_guard(mutex, &pwrpriv->lock) {
+ if (padapter->bSurpriseRemoved ||
+ !(padapter->hw_init_completed) ||
+ (pwrpriv->pwr_mode == PS_MODE_ACTIVE))
+ bReady = true;
+ }
if (bReady)
break;
@@ -578,10 +572,10 @@ void cpwm_int_hdl(struct adapter *padapter, struct reportpwrstate_parm *preportp
pwrpriv = adapter_to_pwrctl(padapter);
- mutex_lock(&pwrpriv->lock);
+ guard(mutex)(&pwrpriv->lock);
if (pwrpriv->rpwm < PS_STATE_S2)
- goto exit;
+ return;
pwrpriv->cpwm = PS_STATE(preportpwrstate->state);
pwrpriv->cpwm_tog = preportpwrstate->state & PS_TOGGLE;
@@ -593,9 +587,6 @@ void cpwm_int_hdl(struct adapter *padapter, struct reportpwrstate_parm *preportp
if (pwrpriv->alives & XMIT_ALIVE)
complete(&padapter->xmitpriv.xmit_comp);
}
-
-exit:
- mutex_unlock(&pwrpriv->lock);
}
static void cpwm_event_callback(struct work_struct *work)
@@ -619,11 +610,10 @@ static void rpwmtimeout_workitem_callback(struct work_struct *work)
dvobj = pwrctl_to_dvobj(pwrpriv);
padapter = dvobj->if1;
- mutex_lock(&pwrpriv->lock);
- if ((pwrpriv->rpwm == pwrpriv->cpwm) || (pwrpriv->cpwm >= PS_STATE_S2))
- goto exit;
-
- mutex_unlock(&pwrpriv->lock);
+ scoped_guard(mutex, &pwrpriv->lock) {
+ if ((pwrpriv->rpwm == pwrpriv->cpwm) || (pwrpriv->cpwm >= PS_STATE_S2))
+ return;
+ }
if (rtw_read8(padapter, 0x100) != 0xEA) {
struct reportpwrstate_parm report;
@@ -634,17 +624,14 @@ static void rpwmtimeout_workitem_callback(struct work_struct *work)
return;
}
- mutex_lock(&pwrpriv->lock);
+ guard(mutex)(&pwrpriv->lock);
if ((pwrpriv->rpwm == pwrpriv->cpwm) || (pwrpriv->cpwm >= PS_STATE_S2))
- goto exit;
+ return;
pwrpriv->brpwmtimeout = true;
rtw_set_rpwm(padapter, pwrpriv->rpwm);
pwrpriv->brpwmtimeout = false;
-
-exit:
- mutex_unlock(&pwrpriv->lock);
}
/*
@@ -696,21 +683,19 @@ s32 rtw_register_task_alive(struct adapter *padapter, u32 task)
pwrctrl = adapter_to_pwrctl(padapter);
pslv = PS_STATE_S2;
- mutex_lock(&pwrctrl->lock);
-
- register_task_alive(pwrctrl, task);
+ scoped_guard(mutex, &pwrctrl->lock) {
+ register_task_alive(pwrctrl, task);
- if (pwrctrl->fw_current_in_ps_mode) {
- if (pwrctrl->cpwm < pslv) {
- if (pwrctrl->cpwm < PS_STATE_S2)
- res = _FAIL;
- if (pwrctrl->rpwm < pslv)
- rtw_set_rpwm(padapter, pslv);
+ if (pwrctrl->fw_current_in_ps_mode) {
+ if (pwrctrl->cpwm < pslv) {
+ if (pwrctrl->cpwm < PS_STATE_S2)
+ res = _FAIL;
+ if (pwrctrl->rpwm < pslv)
+ rtw_set_rpwm(padapter, pslv);
+ }
}
}
- mutex_unlock(&pwrctrl->lock);
-
if (res == _FAIL)
if (pwrctrl->cpwm >= PS_STATE_S2)
res = _SUCCESS;
@@ -744,7 +729,7 @@ void rtw_unregister_task_alive(struct adapter *padapter, u32 task)
pslv = PS_STATE_S2;
}
- mutex_lock(&pwrctrl->lock);
+ guard(mutex)(&pwrctrl->lock);
unregister_task_alive(pwrctrl, task);
@@ -754,8 +739,6 @@ void rtw_unregister_task_alive(struct adapter *padapter, u32 task)
rtw_set_rpwm(padapter, pslv);
}
}
-
- mutex_unlock(&pwrctrl->lock);
}
/*
@@ -781,21 +764,19 @@ s32 rtw_register_tx_alive(struct adapter *padapter)
pwrctrl = adapter_to_pwrctl(padapter);
pslv = PS_STATE_S2;
- mutex_lock(&pwrctrl->lock);
-
- register_task_alive(pwrctrl, XMIT_ALIVE);
+ scoped_guard(mutex, &pwrctrl->lock) {
+ register_task_alive(pwrctrl, XMIT_ALIVE);
- if (pwrctrl->fw_current_in_ps_mode) {
- if (pwrctrl->cpwm < pslv) {
- if (pwrctrl->cpwm < PS_STATE_S2)
- res = _FAIL;
- if (pwrctrl->rpwm < pslv)
- rtw_set_rpwm(padapter, pslv);
+ if (pwrctrl->fw_current_in_ps_mode) {
+ if (pwrctrl->cpwm < pslv) {
+ if (pwrctrl->cpwm < PS_STATE_S2)
+ res = _FAIL;
+ if (pwrctrl->rpwm < pslv)
+ rtw_set_rpwm(padapter, pslv);
+ }
}
}
- mutex_unlock(&pwrctrl->lock);
-
if (res == _FAIL)
if (pwrctrl->cpwm >= PS_STATE_S2)
res = _SUCCESS;
@@ -826,21 +807,19 @@ s32 rtw_register_cmd_alive(struct adapter *padapter)
pwrctrl = adapter_to_pwrctl(padapter);
pslv = PS_STATE_S2;
- mutex_lock(&pwrctrl->lock);
+ scoped_guard(mutex, &pwrctrl->lock) {
+ register_task_alive(pwrctrl, CMD_ALIVE);
- register_task_alive(pwrctrl, CMD_ALIVE);
-
- if (pwrctrl->fw_current_in_ps_mode) {
- if (pwrctrl->cpwm < pslv) {
- if (pwrctrl->cpwm < PS_STATE_S2)
- res = _FAIL;
- if (pwrctrl->rpwm < pslv)
- rtw_set_rpwm(padapter, pslv);
+ if (pwrctrl->fw_current_in_ps_mode) {
+ if (pwrctrl->cpwm < pslv) {
+ if (pwrctrl->cpwm < PS_STATE_S2)
+ res = _FAIL;
+ if (pwrctrl->rpwm < pslv)
+ rtw_set_rpwm(padapter, pslv);
+ }
}
}
- mutex_unlock(&pwrctrl->lock);
-
if (res == _FAIL)
if (pwrctrl->cpwm >= PS_STATE_S2)
res = _SUCCESS;
@@ -871,7 +850,7 @@ void rtw_unregister_tx_alive(struct adapter *padapter)
pslv = PS_STATE_S2;
}
- mutex_lock(&pwrctrl->lock);
+ guard(mutex)(&pwrctrl->lock);
unregister_task_alive(pwrctrl, XMIT_ALIVE);
@@ -880,8 +859,6 @@ void rtw_unregister_tx_alive(struct adapter *padapter)
if ((pslv >= PS_STATE_S2) || (pwrctrl->alives == 0))
rtw_set_rpwm(padapter, pslv);
}
-
- mutex_unlock(&pwrctrl->lock);
}
/*
@@ -907,7 +884,7 @@ void rtw_unregister_cmd_alive(struct adapter *padapter)
pslv = PS_STATE_S2;
}
- mutex_lock(&pwrctrl->lock);
+ guard(mutex)(&pwrctrl->lock);
unregister_task_alive(pwrctrl, CMD_ALIVE);
@@ -917,8 +894,6 @@ void rtw_unregister_cmd_alive(struct adapter *padapter)
rtw_set_rpwm(padapter, pslv);
}
}
-
- mutex_unlock(&pwrctrl->lock);
}
void rtw_init_pwrctrl_priv(struct adapter *padapter)
@@ -1108,9 +1083,8 @@ void rtw_ps_deny(struct adapter *padapter, enum ps_deny_reason reason)
pwrpriv = adapter_to_pwrctl(padapter);
- mutex_lock(&pwrpriv->lock);
+ guard(mutex)(&pwrpriv->lock);
pwrpriv->ps_deny |= BIT(reason);
- mutex_unlock(&pwrpriv->lock);
}
/*
@@ -1123,9 +1097,8 @@ void rtw_ps_deny_cancel(struct adapter *padapter, enum ps_deny_reason reason)
pwrpriv = adapter_to_pwrctl(padapter);
- mutex_lock(&pwrpriv->lock);
+ guard(mutex)(&pwrpriv->lock);
pwrpriv->ps_deny &= ~BIT(reason);
- mutex_unlock(&pwrpriv->lock);
}
/*
diff --git a/drivers/staging/rtl8723bs/core/rtw_wlan_util.c b/drivers/staging/rtl8723bs/core/rtw_wlan_util.c
index 8c1f46706..e14d4ffde 100644
--- a/drivers/staging/rtl8723bs/core/rtw_wlan_util.c
+++ b/drivers/staging/rtl8723bs/core/rtw_wlan_util.c
@@ -296,15 +296,12 @@ inline unsigned long rtw_get_on_cur_ch_time(struct adapter *adapter)
void r8723bs_select_channel(struct adapter *padapter, unsigned char channel)
{
- if (mutex_lock_interruptible(&(adapter_to_dvobj(padapter)->setch_mutex)))
- return;
-
- /* saved channel info */
- rtw_set_oper_ch(padapter, channel);
+ scoped_cond_guard(mutex_intr, return, &(adapter_to_dvobj(padapter)->setch_mutex)) {
+ /* saved channel info */
+ rtw_set_oper_ch(padapter, channel);
- rtw_hal_set_chan(padapter, channel);
-
- mutex_unlock(&(adapter_to_dvobj(padapter)->setch_mutex));
+ rtw_hal_set_chan(padapter, channel);
+ }
}
void set_channel_bwmode(struct adapter *padapter, unsigned char channel, unsigned char channel_offset, unsigned short bwmode)
@@ -314,17 +311,14 @@ void set_channel_bwmode(struct adapter *padapter, unsigned char channel, unsigne
center_ch = rtw_get_center_ch(channel, bwmode, channel_offset);
/* set Channel */
- if (mutex_lock_interruptible(&(adapter_to_dvobj(padapter)->setch_mutex)))
- return;
-
- /* saved channel/bw info */
- rtw_set_oper_ch(padapter, channel);
- rtw_set_oper_bw(padapter, bwmode);
- rtw_set_oper_choffset(padapter, channel_offset);
+ scoped_cond_guard(mutex_intr, return, &(adapter_to_dvobj(padapter)->setch_mutex)) {
+ /* saved channel/bw info */
+ rtw_set_oper_ch(padapter, channel);
+ rtw_set_oper_bw(padapter, bwmode);
+ rtw_set_oper_choffset(padapter, channel_offset);
- rtw_hal_set_chnl_bw(padapter, center_ch, bwmode, channel_offset, chnl_offset80); /* set center channel */
-
- mutex_unlock(&(adapter_to_dvobj(padapter)->setch_mutex));
+ rtw_hal_set_chnl_bw(padapter, center_ch, bwmode, channel_offset, chnl_offset80); /* set center channel */
+ }
}
inline u8 *get_my_bssid(struct wlan_bssid_ex *pnetwork)
--
2.55.0
^ permalink raw reply [flat|nested] 2+ messages in thread* Re: [PATCH] staging: rtl8723bs: Use guards for mutexes
2026-09-19 17:24 [PATCH] staging: rtl8723bs: Use guards for mutexes Omer PALA
@ 2026-09-20 5:16 ` Greg Kroah-Hartman
0 siblings, 0 replies; 2+ messages in thread
From: Greg Kroah-Hartman @ 2026-09-20 5:16 UTC (permalink / raw)
To: Omer PALA; +Cc: open list:STAGING SUBSYSTEM, open list
On Sat, Sep 19, 2026 at 08:24:13PM +0300, Omer PALA wrote:
> Simplify lock management across the rtl8723bs driver by replacing
> manual spinlock and mutex acquire/release calls with scope-based
> cleanup guards (guard() and scoped_guard()).
>
> This reduces boilerplate code, removes redundant error-path unlock
> logic, and prevents potential lock leaks on early return statements.
>
> Signed-off-by: Omer PALA <palaomer100@gmail.com>
Please read the email archives for why we don't take patches like this.
thanks,
greg k-h
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-09-20 5:18 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-09-19 17:24 [PATCH] staging: rtl8723bs: Use guards for mutexes Omer PALA
2026-09-20 5:16 ` Greg Kroah-Hartman
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®