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 <thara.gopinath@linaro.org> Signed-off-by: Zhang Rui <rui.zhang@intel.com>
This commit is contained in:
parent
964f4843a4
commit
68000a0d98
|
@ -712,11 +712,14 @@ cur_state_store(struct device *dev, struct device_attribute *attr,
|
||||||
if ((long)state < 0)
|
if ((long)state < 0)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
mutex_lock(&cdev->lock);
|
||||||
|
|
||||||
result = cdev->ops->set_cur_state(cdev, state);
|
result = cdev->ops->set_cur_state(cdev, state);
|
||||||
if (result)
|
if (!result)
|
||||||
return result;
|
thermal_cooling_device_stats_update(cdev, state);
|
||||||
thermal_cooling_device_stats_update(cdev, state);
|
|
||||||
return count;
|
mutex_unlock(&cdev->lock);
|
||||||
|
return result ? result : count;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct device_attribute
|
static struct device_attribute
|
||||||
|
|
Loading…
Reference in New Issue