SD_PREFER_SIBLING is currently considered in sd_parent_degenerate() but not in sd_degenerate(). It too hinges on load balancing, and thus won't have any effect when set on a domain with a single group. Add it to SD_DEGENERATE_GROUPS_MASK.
Unified · Split
| @@ -131,8 +131,10 @@ SD_FLAG(SD_ASYM_PACKING, SDF_SHARED_CHILD) · 130 unmodified lines | ||
| 131 | 131 | * |
| 132 | 132 | * Set up until domains start spanning NUMA nodes. Close to being a SHARED_CHILD |
| 133 | 133 | * flag, but cleared below domains with SD_ASYM_CPUCAPACITY. |
| 134 | + * | |
| 135 | + * NEEDS_GROUPS: Load balancing flag. | |
| 134 | 136 | */ |
| 135 | −SD_FLAG(SD_PREFER_SIBLING, 0) | |
| 137 | +SD_FLAG(SD_PREFER_SIBLING, SDF_NEEDS_GROUPS) | |
| 136 | 138 | |
| 137 | 139 | /* |
| 138 | 140 | * sched_groups of this level overlap |
| @@ -184,7 +184,7 @@ sd_parent_degenerate(struct sched_domain *sd, struct sched_domain *parent) · 183 unmodified lines | ||
| 184 | 184 | |
| 185 | 185 | /* Flags needing groups don't count if only 1 group in parent */ |
| 186 | 186 | if (parent->groups == parent->groups->next) |
| 187 | − pflags &= ~(SD_DEGENERATE_GROUPS_MASK | SD_PREFER_SIBLING); | |
| 187 | + pflags &= ~SD_DEGENERATE_GROUPS_MASK; | |
| 188 | 188 | |
| 189 | 189 | if (~cflags & pflags) |
| 190 | 190 | return 0; |