[PATCH v1] HID: debug: Use the __set_current_state()

Zihuan Zhang posted 1 patch 9 months ago
drivers/hid/hid-debug.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
[PATCH v1] HID: debug: Use the __set_current_state()
Posted by Zihuan Zhang 9 months ago
When detecting an invalid list->hdev, the process needs to manually set
its state to TASK_RUNNING and exit. In the original code,
set_current_state() (which includes a memory barrier) is used here, but
it is immediately followed by a mutex_unlock() call. Since
mutex_unlock() internally includes a memory barrier, this ensures that
all modifications within the critical section (including the process
state) are visible to other CPUs. Therefore, replacing it with
__set_current_state() (without an implicit barrier) avoids redundant
memory barriers.

Signed-off-by: Zihuan Zhang <zhangzihuan@kylinos.cn>
---
 drivers/hid/hid-debug.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/hid/hid-debug.c b/drivers/hid/hid-debug.c
index 8433306148d5..00a73983ef19 100644
--- a/drivers/hid/hid-debug.c
+++ b/drivers/hid/hid-debug.c
@@ -3726,7 +3726,7 @@ static ssize_t hid_debug_events_read(struct file *file, char __user *buffer,
 			 */
 			if (!list->hdev || !list->hdev->debug) {
 				ret = -EIO;
-				set_current_state(TASK_RUNNING);
+				__set_current_state(TASK_RUNNING);
 				goto out;
 			}
 
-- 
2.25.1
Re: [PATCH v1] HID: debug: Use the __set_current_state()
Posted by Jiri Kosina 8 months ago
On Fri, 9 May 2025, Zihuan Zhang wrote:

> When detecting an invalid list->hdev, the process needs to manually set
> its state to TASK_RUNNING and exit. In the original code,
> set_current_state() (which includes a memory barrier) is used here, but
> it is immediately followed by a mutex_unlock() call. Since
> mutex_unlock() internally includes a memory barrier, this ensures that
> all modifications within the critical section (including the process
> state) are visible to other CPUs. Therefore, replacing it with
> __set_current_state() (without an implicit barrier) avoids redundant
> memory barriers.

Good catch.

Now queued in hid.git#for-6.17/core.

Thanks,

-- 
Jiri Kosina
SUSE Labs