static void init_sched_groups_capacity(int cpu, struct sched_domain *sd)
 {
        struct sched_group *sg = sd->groups;
+       struct cpumask *mask = sched_domains_tmpmask2;
 
        WARN_ON(!sg);
 
        do {
-               int cpu, max_cpu = -1;
+               int cpu, cores = 0, max_cpu = -1;
 
                sg->group_weight = cpumask_weight(sched_group_span(sg));
 
+               cpumask_copy(mask, sched_group_span(sg));
+               for_each_cpu(cpu, mask) {
+                       cores++;
+#ifdef CONFIG_SCHED_SMT
+                       cpumask_andnot(mask, mask, cpu_smt_mask(cpu));
+#endif
+               }
+               sg->cores = cores;
+
                if (!(sd->flags & SD_ASYM_PACKING))
                        goto next;