aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kernel/sched/fair.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index c11e36ff5ea0..201be782b5b3 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -1000,7 +1000,7 @@ struct numa_stats {
1000 */ 1000 */
1001static void update_numa_stats(struct numa_stats *ns, int nid) 1001static void update_numa_stats(struct numa_stats *ns, int nid)
1002{ 1002{
1003 int cpu; 1003 int cpu, cpus = 0;
1004 1004
1005 memset(ns, 0, sizeof(*ns)); 1005 memset(ns, 0, sizeof(*ns));
1006 for_each_cpu(cpu, cpumask_of_node(nid)) { 1006 for_each_cpu(cpu, cpumask_of_node(nid)) {
@@ -1009,8 +1009,21 @@ static void update_numa_stats(struct numa_stats *ns, int nid)
1009 ns->nr_running += rq->nr_running; 1009 ns->nr_running += rq->nr_running;
1010 ns->load += weighted_cpuload(cpu); 1010 ns->load += weighted_cpuload(cpu);
1011 ns->power += power_of(cpu); 1011 ns->power += power_of(cpu);
1012
1013 cpus++;
1012 } 1014 }
1013 1015
1016 /*
1017 * If we raced with hotplug and there are no CPUs left in our mask
1018 * the @ns structure is NULL'ed and task_numa_compare() will
1019 * not find this node attractive.
1020 *
1021 * We'll either bail at !has_capacity, or we'll detect a huge imbalance
1022 * and bail there.
1023 */
1024 if (!cpus)
1025 return;
1026
1014 ns->load = (ns->load * SCHED_POWER_SCALE) / ns->power; 1027 ns->load = (ns->load * SCHED_POWER_SCALE) / ns->power;
1015 ns->capacity = DIV_ROUND_CLOSEST(ns->power, SCHED_POWER_SCALE); 1028 ns->capacity = DIV_ROUND_CLOSEST(ns->power, SCHED_POWER_SCALE);
1016 ns->has_capacity = (ns->nr_running < ns->capacity); 1029 ns->has_capacity = (ns->nr_running < ns->capacity);