Skip to content

Commit 29591c2

Browse files
polesapartniclimcy
authored andcommitted
input: ltr559: Avoid mutex deadlock when setting poll delay
* This is a classic mutex_lock() / cancel_delayed_work_sync() where the delayed work function attempts to take the same mutex too. * This should fix https://jira.lineageos.org/browse/BUGBASH-865 Change-Id: Iecededf5e61f5b41cd9d8eea51c94725d546d6dc
1 parent 58089d1 commit 29591c2

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

drivers/input/misc/ltr559-lc.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -795,6 +795,7 @@ static const struct attribute_group ltr559_attr_group = {
795795

796796
static int ltr559_als_set_poll_delay(struct ltr559_data *data,unsigned int delay)
797797
{
798+
cancel_delayed_work_sync(&data->als_work);
798799
mutex_lock(&data->op_lock);
799800

800801
delay = clamp((int)delay,1,1000);
@@ -803,11 +804,12 @@ static int ltr559_als_set_poll_delay(struct ltr559_data *data,unsigned int delay
803804
data->platform_data->als_poll_interval = delay;
804805
}
805806

806-
if(!data->als_open_state)
807+
if(!data->als_open_state) {
808+
mutex_unlock(&data->op_lock);
807809
return -ESRCH;
810+
}
808811

809812
pr_info("%s poll_interval=%d\n",__func__,data->platform_data->als_poll_interval);
810-
cancel_delayed_work_sync(&data->als_work);
811813
schedule_delayed_work(&data->als_work,msecs_to_jiffies(data->platform_data->als_poll_interval));
812814
mutex_unlock(&data->op_lock);
813815
return 0;

0 commit comments

Comments
 (0)