[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <4C2859A044ED908F+20260120141129.8262-2-2023060904@ycu.edu.cn>
Date: Tue, 20 Jan 2026 22:11:26 +0800
From: 2023060904@....edu.cn
To: linux-staging@...ts.linux.dev
Cc: gregkh@...uxfoundation.org,
dan.carpenter@...aro.org,
2023060904@....edu.cn,
guagua210311@...com,
linux-kernel@...r.kernel.org
Subject: [PATCH v2 2/2] rtl8723bs: Replace atomic ops with normal vars
From: Changjun Zheng <guagua210311@...com>
Based on patch v2 1/2 (refactored increment logic to callers), this patch fully replaces atomic operations with normal variable operations for continual_io_error:
1. Change variable type: atomic_t continual_io_error → s32 continual_io_error
2. Replace atomic_read with normal variable access in check function
3. Replace atomic_inc (in sdio_ops_linux.c callers) with normal increment (++)
4. Replace atomic_set (initialization) with normal assignment (= 0)
Single-thread guarantee for no race conditions:
- Linux kernel driver isolation: Each SDIO device has an independent instance, kernel serializes all IO requests for one device.
- Driver code logic: sd_read32()/sd_write8() are called by dedicated IO thread with linear flow (no concurrent calls).
Motivation: Follow kernel best practices - remove unnecessary atomic ops (memory barrier overhead) since no concurrency exists.
Signed-off-by: Changjun Zheng <guagua210311@...com>
---
Changes in v2:
Remove redundant atomic-related comments (per Dan Carpenter's feedback)
drivers/staging/rtl8723bs/core/rtw_io.c | 4 ++--
drivers/staging/rtl8723bs/include/drv_types.h | 3 ++-
drivers/staging/rtl8723bs/os_dep/sdio_ops_linux.c | 4 ++--
3 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/drivers/staging/rtl8723bs/core/rtw_io.c b/drivers/staging/rtl8723bs/core/rtw_io.c
index 0c450d6cd14b..c21e99b2c01c 100644
--- a/drivers/staging/rtl8723bs/core/rtw_io.c
+++ b/drivers/staging/rtl8723bs/core/rtw_io.c
@@ -139,7 +139,7 @@ int rtw_init_io_priv(struct adapter *padapter, void (*set_intf_ops)(struct adapt
*/
int rtw_inc_and_chk_continual_io_error(struct dvobj_priv *dvobj)
{
- int error_count = atomic_read(&dvobj->continual_io_error);
+ int error_count = dvobj->continual_io_error;
if (error_count > MAX_CONTINUAL_IO_ERR)
return true;
@@ -149,5 +149,5 @@ int rtw_inc_and_chk_continual_io_error(struct dvobj_priv *dvobj)
/* Set the continual_io_error of this @param dvobjprive to 0 */
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..2fed4fcedffd 100644
--- a/drivers/staging/rtl8723bs/include/drv_types.h
+++ b/drivers/staging/rtl8723bs/include/drv_types.h
@@ -1,4 +1,5 @@
/* SPDX-License-Identifier: GPL-2.0 */
+on /
/******************************************************************************
*
* Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
@@ -279,7 +280,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;
diff --git a/drivers/staging/rtl8723bs/os_dep/sdio_ops_linux.c b/drivers/staging/rtl8723bs/os_dep/sdio_ops_linux.c
index 026fb4963d06..5501ba64f050 100644
--- a/drivers/staging/rtl8723bs/os_dep/sdio_ops_linux.c
+++ b/drivers/staging/rtl8723bs/os_dep/sdio_ops_linux.c
@@ -222,7 +222,7 @@ u32 sd_read32(struct intf_hdl *pintfhdl, u32 addr, s32 *err)
} else {
if ((-ESHUTDOWN == *err) || (-ENODEV == *err))
padapter->bSurpriseRemoved = true;
- atomic_inc(&psdiodev->continual_io_error);
+ psdiodev->continual_io_error++;
if (rtw_inc_and_chk_continual_io_error(psdiodev) == true) {
padapter->bSurpriseRemoved = true;
break;
@@ -298,7 +298,7 @@ void sd_write32(struct intf_hdl *pintfhdl, u32 addr, u32 v, s32 *err)
} else {
if ((-ESHUTDOWN == *err) || (-ENODEV == *err))
padapter->bSurpriseRemoved = true;
- atomic_inc(&psdiodev->continual_io_error);
+ psdiodev->continual_io_error++;
if (rtw_inc_and_chk_continual_io_error(psdiodev) == true) {
padapter->bSurpriseRemoved = true;
break;
--
2.43.0
Powered by blists - more mailing lists