We need to unlock on these paths before returning.
Fixes: a20d0ef97abf ("powercap/drivers/dtpm: Add API for dynamic thermal power management")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
*/
int dtpm_update_power(struct dtpm *dtpm, u64 power_min, u64 power_max)
{
+ int ret = 0;
+
mutex_lock(&dtpm_lock);
if (power_min == dtpm->power_min && power_max == dtpm->power_max)
- return 0;
+ goto unlock;
- if (power_max < power_min)
- return -EINVAL;
+ if (power_max < power_min) {
+ ret = -EINVAL;
+ goto unlock;
+ }
__dtpm_sub_power(dtpm);
__dtpm_add_power(dtpm);
+unlock:
mutex_unlock(&dtpm_lock);
- return 0;
+ return ret;
}
/**
mutex_lock(&dtpm_lock);
- if (!list_empty(&dtpm->children))
+ if (!list_empty(&dtpm->children)) {
+ mutex_unlock(&dtpm_lock);
return -EBUSY;
+ }
if (parent)
list_del(&dtpm->sibling);