From: Thara Gopinath Date: Tue, 27 Nov 2018 22:43:11 +0000 (-0500) Subject: thermal: Fix locking in cooling device sysfs update cur_state X-Git-Tag: v4.19.21~229 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9c74cd4afbd3b5b6d90366b7dcb2a7befa8a37f2;p=platform%2Fkernel%2Flinux-rpi.git thermal: Fix locking in cooling device sysfs update cur_state [ Upstream commit 68000a0d983f539c95ebe5dccd4f29535c7ac0af ] Sysfs interface to update cooling device cur_state does not currently holding cooling device lock sometimes leading to stale values in cur_state if getting updated simultanelously from user space and thermal framework. Adding the proper locking code fixes this issue. Signed-off-by: Thara Gopinath Signed-off-by: Zhang Rui Signed-off-by: Sasha Levin --- diff --git a/drivers/thermal/thermal_sysfs.c b/drivers/thermal/thermal_sysfs.c index 2241cea..aa99edb 100644 --- a/drivers/thermal/thermal_sysfs.c +++ b/drivers/thermal/thermal_sysfs.c @@ -712,11 +712,14 @@ cur_state_store(struct device *dev, struct device_attribute *attr, if ((long)state < 0) return -EINVAL; + mutex_lock(&cdev->lock); + result = cdev->ops->set_cur_state(cdev, state); - if (result) - return result; - thermal_cooling_device_stats_update(cdev, state); - return count; + if (!result) + thermal_cooling_device_stats_update(cdev, state); + + mutex_unlock(&cdev->lock); + return result ? result : count; } static struct device_attribute