Lock tz when in user facing sysfs handlers to expose
sustainable power properties. This includes:
sustainable_power_show()
sustainable_power_store()

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, 8 insertions(+), 1 deletion(-)

diff --git a/drivers/thermal/thermal_sysfs.c b/drivers/thermal/thermal_sysfs.c
index 32ffadf..5b08d64 100644
--- a/drivers/thermal/thermal_sysfs.c
+++ b/drivers/thermal/thermal_sysfs.c
@@ -360,9 +360,14 @@ sustainable_power_show(struct device *dev, struct 
device_attribute *devattr,
                       char *buf)
 {
        struct thermal_zone_device *tz = to_thermal_zone(dev);
+       unsigned int sustainable_power;
+
+       mutex_lock(&tz->lock);
+       sustainable_power = tz->tzp->sustainable_power;
+       mutex_unlock(&tz->lock);
 
        if (tz->tzp)
-               return sprintf(buf, "%u\n", tz->tzp->sustainable_power);
+               return sprintf(buf, "%u\n", sustainable_power);
        else
                return -EIO;
 }
@@ -380,7 +385,9 @@ sustainable_power_store(struct device *dev, struct 
device_attribute *devattr,
        if (kstrtou32(buf, 10, &sustainable_power))
                return -EINVAL;
 
+       mutex_lock(&tz->lock);
        tz->tzp->sustainable_power = sustainable_power;
+       mutex_unlock(&tz->lock);
 
        return count;
 }
-- 
2.1.4

Reply via email to