diff options
-rw-r--r-- | kernel/sched/core.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/kernel/sched/core.c b/kernel/sched/core.c index cf8f100433e0..4da0f4bb2ca4 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c | |||
@@ -4914,7 +4914,8 @@ sd_parent_degenerate(struct sched_domain *sd, struct sched_domain *parent) | |||
4914 | SD_BALANCE_FORK | | 4914 | SD_BALANCE_FORK | |
4915 | SD_BALANCE_EXEC | | 4915 | SD_BALANCE_EXEC | |
4916 | SD_SHARE_CPUPOWER | | 4916 | SD_SHARE_CPUPOWER | |
4917 | SD_SHARE_PKG_RESOURCES); | 4917 | SD_SHARE_PKG_RESOURCES | |
4918 | SD_PREFER_SIBLING); | ||
4918 | if (nr_node_ids == 1) | 4919 | if (nr_node_ids == 1) |
4919 | pflags &= ~SD_SERIALIZE; | 4920 | pflags &= ~SD_SERIALIZE; |
4920 | } | 4921 | } |
@@ -5118,6 +5119,13 @@ cpu_attach_domain(struct sched_domain *sd, struct root_domain *rd, int cpu) | |||
5118 | tmp->parent = parent->parent; | 5119 | tmp->parent = parent->parent; |
5119 | if (parent->parent) | 5120 | if (parent->parent) |
5120 | parent->parent->child = tmp; | 5121 | parent->parent->child = tmp; |
5122 | /* | ||
5123 | * Transfer SD_PREFER_SIBLING down in case of a | ||
5124 | * degenerate parent; the spans match for this | ||
5125 | * so the property transfers. | ||
5126 | */ | ||
5127 | if (parent->flags & SD_PREFER_SIBLING) | ||
5128 | tmp->flags |= SD_PREFER_SIBLING; | ||
5121 | destroy_sched_domain(parent, cpu); | 5129 | destroy_sched_domain(parent, cpu); |
5122 | } else | 5130 | } else |
5123 | tmp = tmp->parent; | 5131 | tmp = tmp->parent; |