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: rel_imx_5.10.35_2.0.0-somdevices.0~5554^2~2 X-Git-Url: https://git.somdevices.com/?a=commitdiff_plain;h=68000a0d983f539c95ebe5dccd4f29535c7ac0af;p=linux.git thermal: Fix locking in cooling device sysfs update cur_state 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 --- diff --git a/drivers/thermal/thermal_sysfs.c b/drivers/thermal/thermal_sysfs.c index 2241ceae7d7f..aa99edb4dff7 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