diff options
Diffstat (limited to 'kernel/sched/fair.c')
-rw-r--r-- | kernel/sched/fair.c | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 940e6d17cf96..f0380d4987b3 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c | |||
@@ -3574,11 +3574,26 @@ void update_group_power(struct sched_domain *sd, int cpu) | |||
3574 | 3574 | ||
3575 | power = 0; | 3575 | power = 0; |
3576 | 3576 | ||
3577 | group = child->groups; | 3577 | if (child->flags & SD_OVERLAP) { |
3578 | do { | 3578 | /* |
3579 | power += group->sgp->power; | 3579 | * SD_OVERLAP domains cannot assume that child groups |
3580 | group = group->next; | 3580 | * span the current group. |
3581 | } while (group != child->groups); | 3581 | */ |
3582 | |||
3583 | for_each_cpu(cpu, sched_group_cpus(sdg)) | ||
3584 | power += power_of(cpu); | ||
3585 | } else { | ||
3586 | /* | ||
3587 | * !SD_OVERLAP domains can assume that child groups | ||
3588 | * span the current group. | ||
3589 | */ | ||
3590 | |||
3591 | group = child->groups; | ||
3592 | do { | ||
3593 | power += group->sgp->power; | ||
3594 | group = group->next; | ||
3595 | } while (group != child->groups); | ||
3596 | } | ||
3582 | 3597 | ||
3583 | sdg->sgp->power = power; | 3598 | sdg->sgp->power = power; |
3584 | } | 3599 | } |