From: Dietmar Eggemann Date: Mon, 5 Dec 2016 14:15:54 +0000 (+0000) Subject: EAS: sched/fair: Re-integrate 'honor sync wakeups' into wakeup path X-Git-Tag: release-20171130_firefly~4^2~100^2~55 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=e89e4bb2be584bc559b0d0238d4dffc8db5caf07;p=firefly-linux-kernel-4.4.55.git EAS: sched/fair: Re-integrate 'honor sync wakeups' into wakeup path This patch re-integrates the part which was initially provided by 3b9d7554aeec ("EAS: sched/fair: tunable to honor sync wakeups") into energy_aware_wake_cpu() into select_energy_cpu_brute(). Change-Id: I748fde3ecdeb44651179bce0a5bb8dd82d1903f6 Signed-off-by: Dietmar Eggemann (cherry picked from commit b75b7286cb068d5761621ea134c23dd131db953f) Signed-off-by: Chris Redpath --- diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index ae3cc8df331c..5e4bf1e76275 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -5889,13 +5889,21 @@ static int wake_cap(struct task_struct *p, int cpu, int prev_cpu) return min_cap * 1024 < task_util(p) * capacity_margin; } -static int select_energy_cpu_brute(struct task_struct *p, int prev_cpu) +static int select_energy_cpu_brute(struct task_struct *p, int prev_cpu, int sync) { int i; int min_diff = 0, energy_cpu = prev_cpu, spare_cpu = prev_cpu; unsigned long max_spare = 0; struct sched_domain *sd; + if (sysctl_sched_sync_hint_enable && sync) { + int cpu = smp_processor_id(); + cpumask_t search_cpus; + cpumask_and(&search_cpus, tsk_cpus_allowed(p), cpu_online_mask); + if (cpumask_test_cpu(cpu, &search_cpus)) + return cpu; + } + rcu_read_lock(); sd = rcu_dereference(per_cpu(sd_ea, prev_cpu)); @@ -5970,7 +5978,7 @@ select_task_rq_fair(struct task_struct *p, int prev_cpu, int sd_flag, int wake_f && cpumask_test_cpu(cpu, tsk_cpus_allowed(p)); if (energy_aware() && !(cpu_rq(prev_cpu)->rd->overutilized)) - return select_energy_cpu_brute(p, prev_cpu); + return select_energy_cpu_brute(p, prev_cpu, sync); rcu_read_lock(); for_each_domain(cpu, tmp) {