Setting 1 allows to finish calculation and throttle devices.
Signed-off-by: Lukasz Luba l.luba@partner.samsung.com --- kernel/sched/power.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/kernel/sched/power.c b/kernel/sched/power.c index 6c72a9bee8ac..5639e6c2825d 100644 --- a/kernel/sched/power.c +++ b/kernel/sched/power.c @@ -707,6 +707,7 @@ static int share_power_budget(struct _thermal_zone *zone, u32 power_budget) i++; }
+ /* protect 'weights' changes in the background */ mutex_lock(&zone->lock); /* estimate cooling dev's power and total power */ i = 0; @@ -717,8 +718,8 @@ static int share_power_budget(struct _thermal_zone *zone, u32 power_budget) } mutex_unlock(&zone->lock);
- if (sum_power <= 0) - goto cleanup; + if (sum_power == 0) + sum_power = 1;
/* split power budget to cooling devices */ i = 0; @@ -727,6 +728,8 @@ static int share_power_budget(struct _thermal_zone *zone, u32 power_budget) i++; }
+ /* clamp max possible power for devices and re-share the rest */ + /* set the new state for cooling device based on its granted power */ i = 0; list_for_each_entry(inst, &zone->cooling_list, node) { @@ -734,7 +737,6 @@ static int share_power_budget(struct _thermal_zone *zone, u32 power_budget) i++; }
-cleanup: kfree(power);
return 0;