|
@@ -6398,7 +6398,7 @@ static inline void update_sg_lb_stats(struct lb_env *env,
|
|
|
bool *overload)
|
|
|
{
|
|
|
unsigned long load;
|
|
|
- int i;
|
|
|
+ int i, nr_running;
|
|
|
|
|
|
memset(sgs, 0, sizeof(*sgs));
|
|
|
|
|
@@ -6415,7 +6415,8 @@ static inline void update_sg_lb_stats(struct lb_env *env,
|
|
|
sgs->group_util += cpu_util(i);
|
|
|
sgs->sum_nr_running += rq->cfs.h_nr_running;
|
|
|
|
|
|
- if (rq->nr_running > 1)
|
|
|
+ nr_running = rq->nr_running;
|
|
|
+ if (nr_running > 1)
|
|
|
*overload = true;
|
|
|
|
|
|
#ifdef CONFIG_NUMA_BALANCING
|
|
@@ -6423,7 +6424,10 @@ static inline void update_sg_lb_stats(struct lb_env *env,
|
|
|
sgs->nr_preferred_running += rq->nr_preferred_running;
|
|
|
#endif
|
|
|
sgs->sum_weighted_load += weighted_cpuload(i);
|
|
|
- if (idle_cpu(i))
|
|
|
+ /*
|
|
|
+ * No need to call idle_cpu() if nr_running is not 0
|
|
|
+ */
|
|
|
+ if (!nr_running && idle_cpu(i))
|
|
|
sgs->idle_cpus++;
|
|
|
}
|
|
|
|