Message ID | 1542826891-28642-1-git-send-email-thara.gopinath@linaro.org |
---|---|
State | Accepted |
Commit | 68000a0d983f539c95ebe5dccd4f29535c7ac0af |
Headers | show |
Series | thermal: Fix locking in cooling device sysfs update cur_state | expand |
diff --git a/drivers/thermal/thermal_sysfs.c b/drivers/thermal/thermal_sysfs.c index 2241cea..1f0c1e2 100644 --- a/drivers/thermal/thermal_sysfs.c +++ b/drivers/thermal/thermal_sysfs.c @@ -712,10 +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) + if (result) { + mutex_unlock(&cdev->lock); return result; + } thermal_cooling_device_stats_update(cdev, state); + mutex_unlock(&cdev->lock); return count; }
Sysfs interface to update cooling device cur_state does not currently hold cooling device lock, leading to stale values in cur_state especially if getting updated simultanelously from user space and thermal framework. Adding the proper locking code fixes this issue. Signed-off-by: Thara Gopinath <thara.gopinath@linaro.org> --- drivers/thermal/thermal_sysfs.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) -- 2.1.4