summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorSrinath Sridharan <srinathsr@google.com>2016-07-29 17:50:11 +0100
committerJohn Stultz <john.stultz@linaro.org>2016-08-11 14:26:53 -0700
commit07ec7db165f1990ca563e18888e82991eac1c5e5 (patch)
tree08004a2dccdb440ee53ae0c2202a1f89d4e54a84 /kernel
parent142b2acc79777f3cac93144d7ebf9caa53e97f9b (diff)
sched/fair: Favor higher cpus only for boosted tasks
This CL separates the notion of boost and prefer_idle schedtune attributes in cpu selection. Today only top-app tasks are boosted. The CPU selection is slightly tweaked such that higher order cpus are preferred only for boosted tasks (top-app) and the rest would be skewed towards lower order cpus. This avoids starvation issues for fg tasks when interacting with high priority top-app tasks (a problem often seen in the case of system_server). bug: 30245369 bug: 30292998 Change-Id: I0377e00893b9f6586eec55632a265518fd2fa8a1 Conflicts: kernel/sched/fair.c
Diffstat (limited to 'kernel')
-rw-r--r--kernel/sched/fair.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index d9af0384dbb0..da9323b9ecab 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -5591,7 +5591,7 @@ done:
return target;
}
-static inline int find_best_target(struct task_struct *p, bool prefer_idle)
+static inline int find_best_target(struct task_struct *p, bool boosted, bool prefer_idle)
{
int iter_cpu;
int target_cpu = -1;
@@ -5609,9 +5609,9 @@ static inline int find_best_target(struct task_struct *p, bool prefer_idle)
int idle_idx;
/*
- * favor higher cpus for tasks that prefer idle cores
+ * Iterate from higher cpus for boosted tasks.
*/
- int i = prefer_idle ? NR_CPUS-iter_cpu-1 : iter_cpu;
+ int i = boosted ? NR_CPUS-iter_cpu-1 : iter_cpu;
if (!cpu_online(i) || !cpumask_test_cpu(i, tsk_cpus_allowed(p)))
continue;
@@ -5781,7 +5781,7 @@ static int energy_aware_wake_cpu(struct task_struct *p, int target, int sync)
bool boosted = 0;
bool prefer_idle = 0;
#endif
- int tmp_target = find_best_target(p, boosted || prefer_idle);
+ int tmp_target = find_best_target(p, boosted, prefer_idle);
if (tmp_target >= 0) {
target_cpu = tmp_target;
if ((boosted || prefer_idle) && idle_cpu(target_cpu))