mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 03:36:19 +00:00
sched: fix a bug in sched domain degenerate
Impact: re-add incorrectly eliminated sched domain layers (1) on i386 with SCHED_SMT and SCHED_MC enabled # mount -t cgroup -o cpuset xxx /mnt # echo 0 > /mnt/cpuset.sched_load_balance # mkdir /mnt/0 # echo 0 > /mnt/0/cpuset.cpus # dmesg CPU0 attaching sched-domain: domain 0: span 0 level CPU groups: 0 (2) on i386 with SCHED_MC enabled but SCHED_SMT disabled # same with (1) # dmesg CPU0 attaching NULL sched-domain. The bug is that some sched domains may be skipped unintentionally when degenerating (optimizing) sched domains. Signed-off-by: Li Zefan <lizf@cn.fujitsu.com> Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
4bab0ea1d4
commit
f29c9b1ccb
1 changed files with 4 additions and 2 deletions
|
@ -6877,15 +6877,17 @@ cpu_attach_domain(struct sched_domain *sd, struct root_domain *rd, int cpu)
|
||||||
struct sched_domain *tmp;
|
struct sched_domain *tmp;
|
||||||
|
|
||||||
/* Remove the sched domains which do not contribute to scheduling. */
|
/* Remove the sched domains which do not contribute to scheduling. */
|
||||||
for (tmp = sd; tmp; tmp = tmp->parent) {
|
for (tmp = sd; tmp; ) {
|
||||||
struct sched_domain *parent = tmp->parent;
|
struct sched_domain *parent = tmp->parent;
|
||||||
if (!parent)
|
if (!parent)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (sd_parent_degenerate(tmp, parent)) {
|
if (sd_parent_degenerate(tmp, parent)) {
|
||||||
tmp->parent = parent->parent;
|
tmp->parent = parent->parent;
|
||||||
if (parent->parent)
|
if (parent->parent)
|
||||||
parent->parent->child = tmp;
|
parent->parent->child = tmp;
|
||||||
}
|
} else
|
||||||
|
tmp = tmp->parent;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sd && sd_degenerate(sd)) {
|
if (sd && sd_degenerate(sd)) {
|
||||||
|
|
Loading…
Reference in a new issue