diff options
author | 2025-01-09 16:17:08 +0800 | |
---|---|---|
committer | 2025-01-09 12:44:56 -0800 | |
commit | 02f1a5911550bd6b39526d18282b10d441e04ed1 (patch) | |
tree | 5a77da9777b2579a006b8c32243b2c21379d5c59 | |
parent | hwmon: (acpi_power_meter) Fix uninitialized variables (diff) | |
download | wireguard-linux-02f1a5911550bd6b39526d18282b10d441e04ed1.tar.xz wireguard-linux-02f1a5911550bd6b39526d18282b10d441e04ed1.zip |
hwmon: (acpi_power_meter) Fix update the power trip points on failure
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>
-rw-r--r-- | drivers/hwmon/acpi_power_meter.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/drivers/hwmon/acpi_power_meter.c b/drivers/hwmon/acpi_power_meter.c index dcf86794485f..65de2cadfc60 100644 --- a/drivers/hwmon/acpi_power_meter.c +++ b/drivers/hwmon/acpi_power_meter.c @@ -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; } |