Skip changing state when zone is single cooling, just change the max allowed state.
Signed-off-by: Lukasz Luba l.luba@partner.samsung.com --- kernel/sched/power.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/kernel/sched/power.c b/kernel/sched/power.c index daee84b00b37..a4d31ec5f638 100644 --- a/kernel/sched/power.c +++ b/kernel/sched/power.c @@ -1,8 +1,12 @@ // SPDX-License-Identifier: GPL-2.0 /* - * Scheduler CPU power + * Scheduler CPU power allocation. + * It is based heavily on IPA (PID approach), so related copyright attached. + * It also uses design from schedutil. * - * Copyright (C) 2018 Samsung + * Copyright (C) 2014 ARM Ltd. + * Copyright (C) 2018 Samsung Electronics co., Ltd + * Author: Lukasz Luba l.luba@partner.samsung.com */
#define pr_fmt(fmt) "SCHED_POWER: " fmt @@ -659,8 +663,11 @@ static int cooling_dev_set_state(struct _thermal_zone *zone,
/* check if we can go with higher freq for zone with a few devices*/ if (zone->single_cooling_dev) { - /* we treat single-cooling-dev-zone as a guard for max temp */ + /* We treat single-cooling-dev-zone as a guard for max temp + * and which does not disturb the power split for whole chip. */ cooling->max_single_state = target; + if (target < curr_state) + goto skip_change; } else { /* Lower 'target' state means higer frequency. Prevent going to * higer freq if there was a limit due temperature value @@ -682,6 +689,7 @@ static int cooling_dev_set_state(struct _thermal_zone *zone, cdev->updated = true; mutex_unlock(&cdev->lock);
+skip_change: return ret; }