diff options
Diffstat (limited to 'kernel/sched_fair.c')
-rw-r--r-- | kernel/sched_fair.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/kernel/sched_fair.c b/kernel/sched_fair.c index f2aa987027d6..d924c679dfac 100644 --- a/kernel/sched_fair.c +++ b/kernel/sched_fair.c | |||
@@ -1004,6 +1004,8 @@ static void yield_task_fair(struct rq *rq) | |||
1004 | * not idle and an idle cpu is available. The span of cpus to | 1004 | * not idle and an idle cpu is available. The span of cpus to |
1005 | * search starts with cpus closest then further out as needed, | 1005 | * search starts with cpus closest then further out as needed, |
1006 | * so we always favor a closer, idle cpu. | 1006 | * so we always favor a closer, idle cpu. |
1007 | * Domains may include CPUs that are not usable for migration, | ||
1008 | * hence we need to mask them out (cpu_active_map) | ||
1007 | * | 1009 | * |
1008 | * Returns the CPU we should wake onto. | 1010 | * Returns the CPU we should wake onto. |
1009 | */ | 1011 | */ |
@@ -1031,6 +1033,7 @@ static int wake_idle(int cpu, struct task_struct *p) | |||
1031 | || ((sd->flags & SD_WAKE_IDLE_FAR) | 1033 | || ((sd->flags & SD_WAKE_IDLE_FAR) |
1032 | && !task_hot(p, task_rq(p)->clock, sd))) { | 1034 | && !task_hot(p, task_rq(p)->clock, sd))) { |
1033 | cpus_and(tmp, sd->span, p->cpus_allowed); | 1035 | cpus_and(tmp, sd->span, p->cpus_allowed); |
1036 | cpus_and(tmp, tmp, cpu_active_map); | ||
1034 | for_each_cpu_mask(i, tmp) { | 1037 | for_each_cpu_mask(i, tmp) { |
1035 | if (idle_cpu(i)) { | 1038 | if (idle_cpu(i)) { |
1036 | if (i != task_cpu(p)) { | 1039 | if (i != task_cpu(p)) { |