aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kernel/sched/core.c10
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;