Commit 93a6557558a13f9ff35213efeca483f353c39dd3

Authored by Li Zefan
Committed by Linus Torvalds
1 parent f5393693e9

cpuset: fix wrong calculation of relax domain level

When multiple cpusets are overlapping in their 'cpus' and hence they
form a single sched domain, the largest sched_relax_domain_level among
those should be used. But when top_cpuset's sched_load_balance is
set, its sched_relax_domain_level is used regardless other sub-cpusets'.

This patch fixes it by walking the cpuset hierarchy to find the largest
sched_relax_domain_level.

Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
Cc: Paul Menage <menage@google.com>
Cc: Cedric Le Goater <clg@fr.ibm.com>
Cc: Balbir Singh <balbir@in.ibm.com>
Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Reviewed-by: Paul Jackson <pj@sgi.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Showing 1 changed file with 1 additions and 1 deletions Side-by-side Diff

... ... @@ -616,7 +616,7 @@
616 616 dattr = kmalloc(sizeof(struct sched_domain_attr), GFP_KERNEL);
617 617 if (dattr) {
618 618 *dattr = SD_ATTR_INIT;
619   - update_domain_attr(dattr, &top_cpuset);
  619 + update_domain_attr_tree(dattr, &top_cpuset);
620 620 }
621 621 *doms = top_cpuset.cpus_allowed;
622 622 goto rebuild;