diff options
Diffstat (limited to 'kernel/sched/fair.c')
-rw-r--r-- | kernel/sched/fair.c | 28 |
1 files changed, 7 insertions, 21 deletions
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index c099cc6eebe3..dd00aaf44fda 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c | |||
@@ -2637,8 +2637,6 @@ static int select_idle_sibling(struct task_struct *p, int target) | |||
2637 | int cpu = smp_processor_id(); | 2637 | int cpu = smp_processor_id(); |
2638 | int prev_cpu = task_cpu(p); | 2638 | int prev_cpu = task_cpu(p); |
2639 | struct sched_domain *sd; | 2639 | struct sched_domain *sd; |
2640 | struct sched_group *sg; | ||
2641 | int i; | ||
2642 | 2640 | ||
2643 | /* | 2641 | /* |
2644 | * If the task is going to be woken-up on this cpu and if it is | 2642 | * If the task is going to be woken-up on this cpu and if it is |
@@ -2655,29 +2653,17 @@ static int select_idle_sibling(struct task_struct *p, int target) | |||
2655 | return prev_cpu; | 2653 | return prev_cpu; |
2656 | 2654 | ||
2657 | /* | 2655 | /* |
2658 | * Otherwise, iterate the domains and find an elegible idle cpu. | 2656 | * Otherwise, check assigned siblings to find an elegible idle cpu. |
2659 | */ | 2657 | */ |
2660 | sd = rcu_dereference(per_cpu(sd_llc, target)); | 2658 | sd = rcu_dereference(per_cpu(sd_llc, target)); |
2661 | for_each_lower_domain(sd) { | ||
2662 | sg = sd->groups; | ||
2663 | do { | ||
2664 | if (!cpumask_intersects(sched_group_cpus(sg), | ||
2665 | tsk_cpus_allowed(p))) | ||
2666 | goto next; | ||
2667 | |||
2668 | for_each_cpu(i, sched_group_cpus(sg)) { | ||
2669 | if (!idle_cpu(i)) | ||
2670 | goto next; | ||
2671 | } | ||
2672 | 2659 | ||
2673 | target = cpumask_first_and(sched_group_cpus(sg), | 2660 | for_each_lower_domain(sd) { |
2674 | tsk_cpus_allowed(p)); | 2661 | if (!cpumask_test_cpu(sd->idle_buddy, tsk_cpus_allowed(p))) |
2675 | goto done; | 2662 | continue; |
2676 | next: | 2663 | if (idle_cpu(sd->idle_buddy)) |
2677 | sg = sg->next; | 2664 | return sd->idle_buddy; |
2678 | } while (sg != sd->groups); | ||
2679 | } | 2665 | } |
2680 | done: | 2666 | |
2681 | return target; | 2667 | return target; |
2682 | } | 2668 | } |
2683 | 2669 | ||