Skip to content

Commit 7b4e0b3

Browse files
mszyprowdtor
authored andcommitted
Input: cyapa - add missing input core locking to suspend/resume functions
Grab input->mutex during suspend/resume functions like it is done in other input drivers. This fixes the following warning during system suspend/resume cycle on Samsung Exynos5250-based Snow Chromebook: ------------[ cut here ]------------ WARNING: CPU: 1 PID: 1680 at drivers/input/input.c:2291 input_device_enabled+0x68/0x6c Modules linked in: ... CPU: 1 PID: 1680 Comm: kworker/u4:12 Tainted: G W 6.6.0-rc5-next-20231009 #14109 Hardware name: Samsung Exynos (Flattened Device Tree) Workqueue: events_unbound async_run_entry_fn unwind_backtrace from show_stack+0x10/0x14 show_stack from dump_stack_lvl+0x58/0x70 dump_stack_lvl from __warn+0x1a8/0x1cc __warn from warn_slowpath_fmt+0x18c/0x1b4 warn_slowpath_fmt from input_device_enabled+0x68/0x6c input_device_enabled from cyapa_gen3_set_power_mode+0x13c/0x1dc cyapa_gen3_set_power_mode from cyapa_reinitialize+0x10c/0x15c cyapa_reinitialize from cyapa_resume+0x48/0x98 cyapa_resume from dpm_run_callback+0x90/0x298 dpm_run_callback from device_resume+0xb4/0x258 device_resume from async_resume+0x20/0x64 async_resume from async_run_entry_fn+0x40/0x15c async_run_entry_fn from process_scheduled_works+0xbc/0x6a8 process_scheduled_works from worker_thread+0x188/0x454 worker_thread from kthread+0x108/0x140 kthread from ret_from_fork+0x14/0x28 Exception stack(0xf1625fb0 to 0xf1625ff8) ... ---[ end trace 0000000000000000 ]--- ... ------------[ cut here ]------------ WARNING: CPU: 1 PID: 1680 at drivers/input/input.c:2291 input_device_enabled+0x68/0x6c Modules linked in: ... CPU: 1 PID: 1680 Comm: kworker/u4:12 Tainted: G W 6.6.0-rc5-next-20231009 #14109 Hardware name: Samsung Exynos (Flattened Device Tree) Workqueue: events_unbound async_run_entry_fn unwind_backtrace from show_stack+0x10/0x14 show_stack from dump_stack_lvl+0x58/0x70 dump_stack_lvl from __warn+0x1a8/0x1cc __warn from warn_slowpath_fmt+0x18c/0x1b4 warn_slowpath_fmt from input_device_enabled+0x68/0x6c input_device_enabled from cyapa_gen3_set_power_mode+0x13c/0x1dc cyapa_gen3_set_power_mode from cyapa_reinitialize+0x10c/0x15c cyapa_reinitialize from cyapa_resume+0x48/0x98 cyapa_resume from dpm_run_callback+0x90/0x298 dpm_run_callback from device_resume+0xb4/0x258 device_resume from async_resume+0x20/0x64 async_resume from async_run_entry_fn+0x40/0x15c async_run_entry_fn from process_scheduled_works+0xbc/0x6a8 process_scheduled_works from worker_thread+0x188/0x454 worker_thread from kthread+0x108/0x140 kthread from ret_from_fork+0x14/0x28 Exception stack(0xf1625fb0 to 0xf1625ff8) ... ---[ end trace 0000000000000000 ]--- Fixes: d69f0a4 ("Input: use input_device_enabled()") Signed-off-by: Marek Szyprowski <[email protected]> Reviewed-by: Andrzej Pietrasiewicz <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Dmitry Torokhov <[email protected]>
1 parent 9e06316 commit 7b4e0b3

File tree

1 file changed

+11
-1
lines changed

1 file changed

+11
-1
lines changed

drivers/input/mouse/cyapa.c

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1347,10 +1347,16 @@ static int cyapa_suspend(struct device *dev)
13471347
u8 power_mode;
13481348
int error;
13491349

1350-
error = mutex_lock_interruptible(&cyapa->state_sync_lock);
1350+
error = mutex_lock_interruptible(&cyapa->input->mutex);
13511351
if (error)
13521352
return error;
13531353

1354+
error = mutex_lock_interruptible(&cyapa->state_sync_lock);
1355+
if (error) {
1356+
mutex_unlock(&cyapa->input->mutex);
1357+
return error;
1358+
}
1359+
13541360
/*
13551361
* Runtime PM is enable only when device is in operational mode and
13561362
* users in use, so need check it before disable it to
@@ -1385,6 +1391,8 @@ static int cyapa_suspend(struct device *dev)
13851391
cyapa->irq_wake = (enable_irq_wake(client->irq) == 0);
13861392

13871393
mutex_unlock(&cyapa->state_sync_lock);
1394+
mutex_unlock(&cyapa->input->mutex);
1395+
13881396
return 0;
13891397
}
13901398

@@ -1394,6 +1402,7 @@ static int cyapa_resume(struct device *dev)
13941402
struct cyapa *cyapa = i2c_get_clientdata(client);
13951403
int error;
13961404

1405+
mutex_lock(&cyapa->input->mutex);
13971406
mutex_lock(&cyapa->state_sync_lock);
13981407

13991408
if (device_may_wakeup(dev) && cyapa->irq_wake) {
@@ -1412,6 +1421,7 @@ static int cyapa_resume(struct device *dev)
14121421
enable_irq(client->irq);
14131422

14141423
mutex_unlock(&cyapa->state_sync_lock);
1424+
mutex_unlock(&cyapa->input->mutex);
14151425
return 0;
14161426
}
14171427

0 commit comments

Comments
 (0)