|
@@ -6909,13 +6909,14 @@ static void update_cpu_capacity(struct sched_domain *sd, int cpu)
|
|
|
|
|
|
cpu_rq(cpu)->cpu_capacity = capacity;
|
|
|
sdg->sgc->capacity = capacity;
|
|
|
+ sdg->sgc->min_capacity = capacity;
|
|
|
}
|
|
|
|
|
|
void update_group_capacity(struct sched_domain *sd, int cpu)
|
|
|
{
|
|
|
struct sched_domain *child = sd->child;
|
|
|
struct sched_group *group, *sdg = sd->groups;
|
|
|
- unsigned long capacity;
|
|
|
+ unsigned long capacity, min_capacity;
|
|
|
unsigned long interval;
|
|
|
|
|
|
interval = msecs_to_jiffies(sd->balance_interval);
|
|
@@ -6928,6 +6929,7 @@ void update_group_capacity(struct sched_domain *sd, int cpu)
|
|
|
}
|
|
|
|
|
|
capacity = 0;
|
|
|
+ min_capacity = ULONG_MAX;
|
|
|
|
|
|
if (child->flags & SD_OVERLAP) {
|
|
|
/*
|
|
@@ -6952,11 +6954,12 @@ void update_group_capacity(struct sched_domain *sd, int cpu)
|
|
|
*/
|
|
|
if (unlikely(!rq->sd)) {
|
|
|
capacity += capacity_of(cpu);
|
|
|
- continue;
|
|
|
+ } else {
|
|
|
+ sgc = rq->sd->groups->sgc;
|
|
|
+ capacity += sgc->capacity;
|
|
|
}
|
|
|
|
|
|
- sgc = rq->sd->groups->sgc;
|
|
|
- capacity += sgc->capacity;
|
|
|
+ min_capacity = min(capacity, min_capacity);
|
|
|
}
|
|
|
} else {
|
|
|
/*
|
|
@@ -6966,12 +6969,16 @@ void update_group_capacity(struct sched_domain *sd, int cpu)
|
|
|
|
|
|
group = child->groups;
|
|
|
do {
|
|
|
- capacity += group->sgc->capacity;
|
|
|
+ struct sched_group_capacity *sgc = group->sgc;
|
|
|
+
|
|
|
+ capacity += sgc->capacity;
|
|
|
+ min_capacity = min(sgc->min_capacity, min_capacity);
|
|
|
group = group->next;
|
|
|
} while (group != child->groups);
|
|
|
}
|
|
|
|
|
|
sdg->sgc->capacity = capacity;
|
|
|
+ sdg->sgc->min_capacity = min_capacity;
|
|
|
}
|
|
|
|
|
|
/*
|