]> git.karo-electronics.de Git - linux-beck.git/blobdiff - kernel/sched/fair.c
sched: Fix SD_OVERLAP
[linux-beck.git] / kernel / sched / fair.c
index 940e6d17cf96a333fd7ea0c4543e2578effd4638..f0380d4987b3a02ecaa9217a0de404c31064cea2 100644 (file)
@@ -3574,11 +3574,26 @@ void update_group_power(struct sched_domain *sd, int cpu)
 
        power = 0;
 
-       group = child->groups;
-       do {
-               power += group->sgp->power;
-               group = group->next;
-       } while (group != child->groups);
+       if (child->flags & SD_OVERLAP) {
+               /*
+                * SD_OVERLAP domains cannot assume that child groups
+                * span the current group.
+                */
+
+               for_each_cpu(cpu, sched_group_cpus(sdg))
+                       power += power_of(cpu);
+       } else  {
+               /*
+                * !SD_OVERLAP domains can assume that child groups
+                * span the current group.
+                */ 
+
+               group = child->groups;
+               do {
+                       power += group->sgp->power;
+                       group = group->next;
+               } while (group != child->groups);
+       }
 
        sdg->sgp->power = power;
 }