]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
hwmon: (acpi_power_meter) Fix update the power trip points on failure
authorHuisong Li <lihuisong@huawei.com>
Thu, 9 Jan 2025 08:17:08 +0000 (16:17 +0800)
committerGuenter Roeck <linux@roeck-us.net>
Thu, 9 Jan 2025 20:44:56 +0000 (12:44 -0800)
The power trip points maintained in local should not be updated when '_PTP'
method fails to evaluate.

Signed-off-by: Huisong Li <lihuisong@huawei.com>
Link: https://lore.kernel.org/r/20250109081708.27366-3-lihuisong@huawei.com
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
drivers/hwmon/acpi_power_meter.c

index dcf86794485fe0b73d1a572cb866a28021f91d41..65de2cadfc60e01288dc2d2a5dc80a0c4e5446f7 100644 (file)
@@ -293,8 +293,8 @@ static ssize_t set_trip(struct device *dev, struct device_attribute *devattr,
        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
        struct acpi_device *acpi_dev = to_acpi_device(dev);
        struct acpi_power_meter_resource *resource = acpi_dev->driver_data;
+       unsigned long temp, trip_bk;
        int res;
-       unsigned long temp;
 
        res = kstrtoul(buf, 10, &temp);
        if (res)
@@ -302,13 +302,15 @@ static ssize_t set_trip(struct device *dev, struct device_attribute *devattr,
 
        temp = DIV_ROUND_CLOSEST(temp, 1000);
 
-       mutex_lock(&resource->lock);
+       guard(mutex)(&resource->lock);
+
+       trip_bk = resource->trip[attr->index - 7];
        resource->trip[attr->index - 7] = temp;
        res = set_acpi_trip(resource);
-       mutex_unlock(&resource->lock);
-
-       if (res)
+       if (res) {
+               resource->trip[attr->index - 7] = trip_bk;
                return res;
+       }
 
        return count;
 }