aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/sched_fair.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/sched_fair.c')
-rw-r--r--kernel/sched_fair.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/kernel/sched_fair.c b/kernel/sched_fair.c
index 08ffffd4a410..36b5e34fa99e 100644
--- a/kernel/sched_fair.c
+++ b/kernel/sched_fair.c
@@ -1026,6 +1026,24 @@ static int wake_idle(int cpu, struct task_struct *p)
1026{ 1026{
1027 struct sched_domain *sd; 1027 struct sched_domain *sd;
1028 int i; 1028 int i;
1029 unsigned int chosen_wakeup_cpu;
1030 int this_cpu;
1031
1032 /*
1033 * At POWERSAVINGS_BALANCE_WAKEUP level, if both this_cpu and prev_cpu
1034 * are idle and this is not a kernel thread and this task's affinity
1035 * allows it to be moved to preferred cpu, then just move!
1036 */
1037
1038 this_cpu = smp_processor_id();
1039 chosen_wakeup_cpu =
1040 cpu_rq(this_cpu)->rd->sched_mc_preferred_wakeup_cpu;
1041
1042 if (sched_mc_power_savings >= POWERSAVINGS_BALANCE_WAKEUP &&
1043 idle_cpu(cpu) && idle_cpu(this_cpu) &&
1044 p->mm && !(p->flags & PF_KTHREAD) &&
1045 cpu_isset(chosen_wakeup_cpu, p->cpus_allowed))
1046 return chosen_wakeup_cpu;
1029 1047
1030 /* 1048 /*
1031 * If it is idle, then it is the best cpu to run this task. 1049 * If it is idle, then it is the best cpu to run this task.