| From a841f8cef4bb124f0f5563314d0beaf2e1249d72 Mon Sep 17 00:00:00 2001 |
| From: Dimitri Sivanich <sivanich@sgi.com> |
| Date: Tue, 5 Jun 2012 13:44:36 -0500 |
| Subject: sched: Fix the relax_domain_level boot parameter |
| |
| From: Dimitri Sivanich <sivanich@sgi.com> |
| |
| commit a841f8cef4bb124f0f5563314d0beaf2e1249d72 upstream. |
| |
| It does not get processed because sched_domain_level_max is 0 at the |
| time that setup_relax_domain_level() is run. |
| |
| Simply accept the value as it is, as we don't know the value of |
| sched_domain_level_max until sched domain construction is completed. |
| |
| Fix sched_relax_domain_level in cpuset. The build_sched_domain() routine calls |
| the set_domain_attribute() routine prior to setting the sd->level, however, |
| the set_domain_attribute() routine relies on the sd->level to decide whether |
| idle load balancing will be off/on. |
| |
| Signed-off-by: Dimitri Sivanich <sivanich@sgi.com> |
| Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> |
| Link: http://lkml.kernel.org/r/20120605184436.GA15668@sgi.com |
| Signed-off-by: Ingo Molnar <mingo@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| kernel/sched.c | 9 +++------ |
| 1 file changed, 3 insertions(+), 6 deletions(-) |
| |
| --- a/kernel/sched.c |
| +++ b/kernel/sched.c |
| @@ -7220,11 +7220,8 @@ int sched_domain_level_max; |
| |
| static int __init setup_relax_domain_level(char *str) |
| { |
| - unsigned long val; |
| - |
| - val = simple_strtoul(str, NULL, 0); |
| - if (val < sched_domain_level_max) |
| - default_relax_domain_level = val; |
| + if (kstrtoint(str, 0, &default_relax_domain_level)) |
| + pr_warn("Unable to set relax_domain_level\n"); |
| |
| return 1; |
| } |
| @@ -7417,7 +7414,6 @@ struct sched_domain *build_sched_domain( |
| if (!sd) |
| return child; |
| |
| - set_domain_attribute(sd, attr); |
| cpumask_and(sched_domain_span(sd), cpu_map, tl->mask(cpu)); |
| if (child) { |
| sd->level = child->level + 1; |
| @@ -7425,6 +7421,7 @@ struct sched_domain *build_sched_domain( |
| child->parent = sd; |
| } |
| sd->child = child; |
| + set_domain_attribute(sd, attr); |
| |
| return sd; |
| } |