emul_temp_store locks only for setting temperature,
but it must lock also for calls to tz.ops.

Cc: Zhang Rui <[email protected]>
Cc: [email protected]
Cc: [email protected]
Signed-off-by: Eduardo Valentin <[email protected]>
---
 drivers/thermal/thermal_sysfs.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/drivers/thermal/thermal_sysfs.c b/drivers/thermal/thermal_sysfs.c
index 234eb18..32ffadf 100644
--- a/drivers/thermal/thermal_sysfs.c
+++ b/drivers/thermal/thermal_sysfs.c
@@ -340,13 +340,12 @@ emul_temp_store(struct device *dev, struct 
device_attribute *attr,
        if (kstrtoint(buf, 10, &temperature))
                return -EINVAL;
 
-       if (!tz->ops->set_emul_temp) {
-               mutex_lock(&tz->lock);
+       mutex_lock(&tz->lock);
+       if (!tz->ops->set_emul_temp)
                tz->emul_temperature = temperature;
-               mutex_unlock(&tz->lock);
-       } else {
+       else
                ret = tz->ops->set_emul_temp(tz, temperature);
-       }
+       mutex_unlock(&tz->lock);
 
        if (!ret)
                thermal_zone_device_update(tz);
-- 
2.1.4

Reply via email to