Browse Source

cpuset: limit the input of cpuset.sched_relax_domain_level

We allow the inputs to be [-1 ... SD_LV_MAX), and return -EINVAL
for inputs outside this range.

Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
Acked-by: Paul Menage <menage@google.com>
Acked-by: Paul Jackson <pj@sgi.com>
Acked-by: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Li Zefan 17 years ago
parent
commit
30e0e17819
3 changed files with 9 additions and 4 deletions
  1. 1 1
      Documentation/cpusets.txt
  2. 2 2
      kernel/cpuset.c
  3. 6 1
      kernel/sched.c

+ 1 - 1
Documentation/cpusets.txt

@@ -542,7 +542,7 @@ otherwise initial value -1 that indicates the cpuset has no request.
    2  : search cores in a package.
    2  : search cores in a package.
    3  : search cpus in a node [= system wide on non-NUMA system]
    3  : search cpus in a node [= system wide on non-NUMA system]
  ( 4  : search nodes in a chunk of node [on NUMA system] )
  ( 4  : search nodes in a chunk of node [on NUMA system] )
- ( 5~ : search system wide [on NUMA system])
+ ( 5  : search system wide [on NUMA system] )
 
 
 This file is per-cpuset and affect the sched domain where the cpuset
 This file is per-cpuset and affect the sched domain where the cpuset
 belongs to.  Therefore if the flag 'sched_load_balance' of a cpuset
 belongs to.  Therefore if the flag 'sched_load_balance' of a cpuset

+ 2 - 2
kernel/cpuset.c

@@ -1037,8 +1037,8 @@ int current_cpuset_is_being_rebound(void)
 
 
 static int update_relax_domain_level(struct cpuset *cs, s64 val)
 static int update_relax_domain_level(struct cpuset *cs, s64 val)
 {
 {
-	if ((int)val < 0)
-		val = -1;
+	if (val < -1 || val >= SD_LV_MAX)
+		return -EINVAL;
 
 
 	if (val != cs->relax_domain_level) {
 	if (val != cs->relax_domain_level) {
 		cs->relax_domain_level = val;
 		cs->relax_domain_level = val;

+ 6 - 1
kernel/sched.c

@@ -6877,7 +6877,12 @@ static int default_relax_domain_level = -1;
 
 
 static int __init setup_relax_domain_level(char *str)
 static int __init setup_relax_domain_level(char *str)
 {
 {
-	default_relax_domain_level = simple_strtoul(str, NULL, 0);
+	unsigned long val;
+
+	val = simple_strtoul(str, NULL, 0);
+	if (val < SD_LV_MAX)
+		default_relax_domain_level = val;
+
 	return 1;
 	return 1;
 }
 }
 __setup("relax_domain_level=", setup_relax_domain_level);
 __setup("relax_domain_level=", setup_relax_domain_level);