From: Daeyeong Lee Date: Mon, 14 May 2018 10:09:11 +0000 (+0900) Subject: sched: ems: ontime: Don't allow to down-migrate heaviest task. X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=391324a26ed2c155d851adb17ef5fbf159779a59;p=GitHub%2FLineageOS%2Fandroid_kernel_motorola_exynos9610.git sched: ems: ontime: Don't allow to down-migrate heaviest task. Change-Id: I0daf9e82d69438155ce80c33a6a4709523462491 Signed-off-by: Daeyeong Lee --- diff --git a/kernel/sched/ems/ontime.c b/kernel/sched/ems/ontime.c index e10fc9e47b2d..5ec29d40b48d 100644 --- a/kernel/sched/ems/ontime.c +++ b/kernel/sched/ems/ontime.c @@ -535,9 +535,32 @@ int ontime_can_migration(struct task_struct *p, int dst_cpu) return true; } + /* + * When runqueue is busy, check whether this task is heaviest. + * If this task is not heaviest in runqueue, allow it to be migrated. + */ if (cpu_rq(src_cpu)->nr_running > 1) { - trace_ems_ontime_check_migrate(p, dst_cpu, true, "curr is busy"); - return true; + struct task_struct *curr = cpu_curr(src_cpu); + struct sched_entity *se = __pick_first_entity(p->se.cfs_rq); + int count; + + /* Firstly, compare with curr running task */ + if (ontime_load_avg(p) < ontime_load_avg(curr)) { + trace_ems_ontime_check_migrate(p, dst_cpu, true, "busy runqueue"); + return true; + } + + /* Secondly, compare with tasks in rq */ + for (count = 0; se && count < TASK_TRACK_COUNT; + se = __pick_next_entity(se), count++) { + if (entity_is_cfs_rq(se)) + continue; + + if (ontime_load_avg(p) < ontime_load_avg(task_of(se))) { + trace_ems_ontime_check_migrate(p, dst_cpu, true, "busy runqueue"); + return true; + } + } } trace_ems_ontime_check_migrate(p, dst_cpu, false, "heavy task");