From 32d20d75d9674aa04349143b47c7b4db8eed3193 Mon Sep 17 00:00:00 2001 From: Daeyeong Lee Date: Mon, 20 Aug 2018 16:03:26 +0900 Subject: [PATCH] [COMMON] sched: ems: Consider sync cpu when ontime task wakeup Change-Id: Ia77686fd9341ec427643c95bf82b1366a6303807 Signed-off-by: Daeyeong Lee --- kernel/sched/ems/core.c | 2 +- kernel/sched/ems/ems.h | 2 +- kernel/sched/ems/ontime.c | 13 ++++++++++++- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/kernel/sched/ems/core.c b/kernel/sched/ems/core.c index 6876795ff6b2..5e48067f9e64 100644 --- a/kernel/sched/ems/core.c +++ b/kernel/sched/ems/core.c @@ -212,7 +212,7 @@ int exynos_wakeup_balance(struct task_struct *p, int prev_cpu, int sd_flag, int * Ontime task is very sensitive to performance because it is usually the * main task of application. Therefore, it has the highest priority. */ - target_cpu = ontime_task_wakeup(p); + target_cpu = ontime_task_wakeup(p, sync); if (cpu_selected(target_cpu)) { strcpy(state, "ontime migration"); goto out; diff --git a/kernel/sched/ems/ems.h b/kernel/sched/ems/ems.h index fa9ee36b71a8..29f50069eeaa 100644 --- a/kernel/sched/ems/ems.h +++ b/kernel/sched/ems/ems.h @@ -18,7 +18,7 @@ extern struct kobject *ems_kobj; -extern int ontime_task_wakeup(struct task_struct *p); +extern int ontime_task_wakeup(struct task_struct *p, int sync); extern int select_perf_cpu(struct task_struct *p); extern int global_boosting(struct task_struct *p); extern int global_boosted(void); diff --git a/kernel/sched/ems/ontime.c b/kernel/sched/ems/ontime.c index 2ea4cd312495..9abba020e6fd 100644 --- a/kernel/sched/ems/ontime.c +++ b/kernel/sched/ems/ontime.c @@ -523,7 +523,7 @@ void ontime_migration(void) spin_unlock(&om_lock); } -int ontime_task_wakeup(struct task_struct *p) +int ontime_task_wakeup(struct task_struct *p, int sync) { struct cpumask fit_cpus; int dst_cpu, src_cpu = task_cpu(p); @@ -540,6 +540,17 @@ int ontime_task_wakeup(struct task_struct *p) if (cpumask_test_cpu(MIN_CAPACITY_CPU, &fit_cpus)) return -1; + /* If this cpu is fit and sync, wake up on this cpu */ + if (sysctl_sched_sync_hint_enable && sync) { + int cpu = smp_processor_id(); + + if (cpumask_test_cpu(cpu, &p->cpus_allowed) + && cpumask_test_cpu(cpu, &fit_cpus)) { + trace_ems_ontime_task_wakeup(p, src_cpu, cpu, "ontime-sync wakeup"); + return cpu; + } + } + dst_cpu = ontime_select_target_cpu(p, &fit_cpus); if (cpu_selected(dst_cpu)) { trace_ems_ontime_task_wakeup(p, src_cpu, dst_cpu, "ontime wakeup"); -- 2.20.1