From 9b71fb7cbbf945991337c902a6faa3349a5f7750 Mon Sep 17 00:00:00 2001 From: Srivatsa Vaddagiri Date: Tue, 10 Jun 2014 17:03:43 -0700 Subject: [PATCH] sched: Account for cpu's current frequency when calculating its power cost In estimating cost of running a task on a given cpu, cost of cpu at its current frequency needs to over-ride cost at frequency demanded by task, where cur_freq exceeds required frequency of task. This is because placing a task on a cpu can only result in an increase of cpu's frequency. Change-Id: I021a3bbaf179bf1ec2c7f4556870256936797eb9 Signed-off-by: Srivatsa Vaddagiri Signed-off-by: Syed Rameez Mustafa --- kernel/sched/fair.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index b2d70a8fb44a..4e7d93e9f8b6 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -2840,6 +2840,7 @@ unsigned int power_cost_at_freq(int cpu, unsigned int freq) static unsigned int power_cost(struct task_struct *p, int cpu) { unsigned int demand; + unsigned int cur_freq = cpu_rq(cpu)->cur_freq; if (!sysctl_sched_enable_power_aware || sched_use_pelt) return cpu_rq(cpu)->capacity; @@ -2851,6 +2852,8 @@ static unsigned int power_cost(struct task_struct *p, int cpu) demand *= cpu_rq(cpu)->max_possible_freq; demand /= 100; /* khz needed */ + demand = max(cur_freq, demand); + return power_cost_at_freq(cpu, demand); }