[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <30BAC49CD5860042+20260119080606.189297-1-2023060904@ycu.edu.cn>
Date: Mon, 19 Jan 2026 16:06:06 +0800
From: 2023060904@....edu.cn
To: gregkh@...uxfoundation.org
Cc: linux-staging@...ts.linux.dev,
linux-kernel@...r.kernel.org,
2023060904@....edu.cn,
guagua210311@...com
Subject: [PATCH] [rtl8723bs] Remove unnecessary atomic operations for continual_io_error
From: Changjun Zheng <guagua210311@...com>
continual_io_error is only accessed in SDIO IO single execution flow,
no multi-thread race condition exists, so atomic operations are redundant.
Change atomic_t to s32 and replace atomic_inc_return/atomic_set with normal ops.
Signed-off-by: Changjun Zheng <guagua210311@...com>
---
drivers/staging/rtl8723bs/core/rtw_io.c | 16 ++++++++++++----
drivers/staging/rtl8723bs/include/drv_types.h | 2 +-
2 files changed, 13 insertions(+), 5 deletions(-)
diff --git a/drivers/staging/rtl8723bs/core/rtw_io.c b/drivers/staging/rtl8723bs/core/rtw_io.c
index fe9f94001eed..95d42025807e 100644
--- a/drivers/staging/rtl8723bs/core/rtw_io.c
+++ b/drivers/staging/rtl8723bs/core/rtw_io.c
@@ -135,11 +135,15 @@ int rtw_init_io_priv(struct adapter *padapter, void (*set_intf_ops)(struct adapt
/*
* Increase and check if the continual_io_error of this @param dvobjprive is larger than MAX_CONTINUAL_IO_ERR
* @return true:
- * @return false:
+ * @return false:
+
+ * Note: Original implementation used atomic_inc_return for atomic increment.
+ * Reason for change: continual_io_error is only accessed in SDIO IO single execution flow,
+ * no race condition, so normal increment is safe (remove redundant atomic operation).
*/
int rtw_inc_and_chk_continual_io_error(struct dvobj_priv *dvobj)
{
- int error_count = atomic_inc_return(&dvobj->continual_io_error);
+ s32 error_count = ++dvobj->continual_io_error;
if (error_count > MAX_CONTINUAL_IO_ERR)
return true;
@@ -147,8 +151,12 @@ int rtw_inc_and_chk_continual_io_error(struct dvobj_priv *dvobj)
return false;
}
-/* Set the continual_io_error of this @param dvobjprive to 0 */
+/* Set the continual_io_error of this @param dvobjprive to 0
+ * Note: Original implementation used atomic_set for atomic assignment.
+ * Reason for change: continual_io_error is only accessed in SDIO IO single execution flow,
+ * no race condition, so normal assignment is safe (remove redundant atomic operation).
+ */
void rtw_reset_continual_io_error(struct dvobj_priv *dvobj)
{
- atomic_set(&dvobj->continual_io_error, 0);
+ dvobj->continual_io_error = 0;
}
diff --git a/drivers/staging/rtl8723bs/include/drv_types.h b/drivers/staging/rtl8723bs/include/drv_types.h
index f86180dc350c..9112ee5f80ca 100644
--- a/drivers/staging/rtl8723bs/include/drv_types.h
+++ b/drivers/staging/rtl8723bs/include/drv_types.h
@@ -279,7 +279,7 @@ struct dvobj_priv {
u8 Queue2Pipe[HW_QUEUE_ENTRY];/* for out pipe mapping */
u8 irq_alloc;
- atomic_t continual_io_error;
+ s32 continual_io_error;
atomic_t disable_func;
--
2.43.0
Powered by blists - more mailing lists