diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-06-20 15:37:13 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-06-20 15:37:13 -0400 |
commit | 1f1e2ce8a55bac60ff165d353c6b882e750c9092 (patch) | |
tree | b11aaa5baa04ea5ea0ecc549fa1c95430919cd82 | |
parent | e570dc2a503f8334b700e8483082c675394f53fd (diff) | |
parent | 9c106c119ebedf624fbd682fd2a4d52e3c8c1a67 (diff) |
Merge branch 'core-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'core-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
softlockup: fix NMI hangs due to lock race - 2.6.26-rc regression
rcupreempt: remove export of rcu_batches_completed_bh
cpuset: limit the input of cpuset.sched_relax_domain_level
-rw-r--r-- | Documentation/cpusets.txt | 2 | ||||
-rw-r--r-- | kernel/cpuset.c | 4 | ||||
-rw-r--r-- | kernel/rcupreempt.c | 2 | ||||
-rw-r--r-- | kernel/sched.c | 7 | ||||
-rw-r--r-- | kernel/softlockup.c | 15 |
5 files changed, 19 insertions, 11 deletions
diff --git a/Documentation/cpusets.txt b/Documentation/cpusets.txt index d803c5c68ab5..353504de3084 100644 --- a/Documentation/cpusets.txt +++ b/Documentation/cpusets.txt | |||
@@ -542,7 +542,7 @@ otherwise initial value -1 that indicates the cpuset has no request. | |||
542 | 2 : search cores in a package. | 542 | 2 : search cores in a package. |
543 | 3 : search cpus in a node [= system wide on non-NUMA system] | 543 | 3 : search cpus in a node [= system wide on non-NUMA system] |
544 | ( 4 : search nodes in a chunk of node [on NUMA system] ) | 544 | ( 4 : search nodes in a chunk of node [on NUMA system] ) |
545 | ( 5~ : search system wide [on NUMA system]) | 545 | ( 5 : search system wide [on NUMA system] ) |
546 | 546 | ||
547 | This file is per-cpuset and affect the sched domain where the cpuset | 547 | This file is per-cpuset and affect the sched domain where the cpuset |
548 | belongs to. Therefore if the flag 'sched_load_balance' of a cpuset | 548 | belongs to. Therefore if the flag 'sched_load_balance' of a cpuset |
diff --git a/kernel/cpuset.c b/kernel/cpuset.c index bceb89557973..9fceb97e989c 100644 --- a/kernel/cpuset.c +++ b/kernel/cpuset.c | |||
@@ -1037,8 +1037,8 @@ int current_cpuset_is_being_rebound(void) | |||
1037 | 1037 | ||
1038 | static int update_relax_domain_level(struct cpuset *cs, s64 val) | 1038 | static int update_relax_domain_level(struct cpuset *cs, s64 val) |
1039 | { | 1039 | { |
1040 | if ((int)val < 0) | 1040 | if (val < -1 || val >= SD_LV_MAX) |
1041 | val = -1; | 1041 | return -EINVAL; |
1042 | 1042 | ||
1043 | if (val != cs->relax_domain_level) { | 1043 | if (val != cs->relax_domain_level) { |
1044 | cs->relax_domain_level = val; | 1044 | cs->relax_domain_level = val; |
diff --git a/kernel/rcupreempt.c b/kernel/rcupreempt.c index e1cdf196a515..5e02b7740702 100644 --- a/kernel/rcupreempt.c +++ b/kernel/rcupreempt.c | |||
@@ -217,8 +217,6 @@ long rcu_batches_completed(void) | |||
217 | } | 217 | } |
218 | EXPORT_SYMBOL_GPL(rcu_batches_completed); | 218 | EXPORT_SYMBOL_GPL(rcu_batches_completed); |
219 | 219 | ||
220 | EXPORT_SYMBOL_GPL(rcu_batches_completed_bh); | ||
221 | |||
222 | void __rcu_read_lock(void) | 220 | void __rcu_read_lock(void) |
223 | { | 221 | { |
224 | int idx; | 222 | int idx; |
diff --git a/kernel/sched.c b/kernel/sched.c index 4a3cb0614158..b048ad8a11af 100644 --- a/kernel/sched.c +++ b/kernel/sched.c | |||
@@ -6879,7 +6879,12 @@ static int default_relax_domain_level = -1; | |||
6879 | 6879 | ||
6880 | static int __init setup_relax_domain_level(char *str) | 6880 | static int __init setup_relax_domain_level(char *str) |
6881 | { | 6881 | { |
6882 | default_relax_domain_level = simple_strtoul(str, NULL, 0); | 6882 | unsigned long val; |
6883 | |||
6884 | val = simple_strtoul(str, NULL, 0); | ||
6885 | if (val < SD_LV_MAX) | ||
6886 | default_relax_domain_level = val; | ||
6887 | |||
6883 | return 1; | 6888 | return 1; |
6884 | } | 6889 | } |
6885 | __setup("relax_domain_level=", setup_relax_domain_level); | 6890 | __setup("relax_domain_level=", setup_relax_domain_level); |
diff --git a/kernel/softlockup.c b/kernel/softlockup.c index 01b6522fd92b..c828c2339cc9 100644 --- a/kernel/softlockup.c +++ b/kernel/softlockup.c | |||
@@ -49,12 +49,17 @@ static unsigned long get_timestamp(int this_cpu) | |||
49 | return cpu_clock(this_cpu) >> 30LL; /* 2^30 ~= 10^9 */ | 49 | return cpu_clock(this_cpu) >> 30LL; /* 2^30 ~= 10^9 */ |
50 | } | 50 | } |
51 | 51 | ||
52 | void touch_softlockup_watchdog(void) | 52 | static void __touch_softlockup_watchdog(void) |
53 | { | 53 | { |
54 | int this_cpu = raw_smp_processor_id(); | 54 | int this_cpu = raw_smp_processor_id(); |
55 | 55 | ||
56 | __raw_get_cpu_var(touch_timestamp) = get_timestamp(this_cpu); | 56 | __raw_get_cpu_var(touch_timestamp) = get_timestamp(this_cpu); |
57 | } | 57 | } |
58 | |||
59 | void touch_softlockup_watchdog(void) | ||
60 | { | ||
61 | __raw_get_cpu_var(touch_timestamp) = 0; | ||
62 | } | ||
58 | EXPORT_SYMBOL(touch_softlockup_watchdog); | 63 | EXPORT_SYMBOL(touch_softlockup_watchdog); |
59 | 64 | ||
60 | void touch_all_softlockup_watchdogs(void) | 65 | void touch_all_softlockup_watchdogs(void) |
@@ -80,7 +85,7 @@ void softlockup_tick(void) | |||
80 | unsigned long now; | 85 | unsigned long now; |
81 | 86 | ||
82 | if (touch_timestamp == 0) { | 87 | if (touch_timestamp == 0) { |
83 | touch_softlockup_watchdog(); | 88 | __touch_softlockup_watchdog(); |
84 | return; | 89 | return; |
85 | } | 90 | } |
86 | 91 | ||
@@ -95,7 +100,7 @@ void softlockup_tick(void) | |||
95 | 100 | ||
96 | /* do not print during early bootup: */ | 101 | /* do not print during early bootup: */ |
97 | if (unlikely(system_state != SYSTEM_RUNNING)) { | 102 | if (unlikely(system_state != SYSTEM_RUNNING)) { |
98 | touch_softlockup_watchdog(); | 103 | __touch_softlockup_watchdog(); |
99 | return; | 104 | return; |
100 | } | 105 | } |
101 | 106 | ||
@@ -214,7 +219,7 @@ static int watchdog(void *__bind_cpu) | |||
214 | sched_setscheduler(current, SCHED_FIFO, ¶m); | 219 | sched_setscheduler(current, SCHED_FIFO, ¶m); |
215 | 220 | ||
216 | /* initialize timestamp */ | 221 | /* initialize timestamp */ |
217 | touch_softlockup_watchdog(); | 222 | __touch_softlockup_watchdog(); |
218 | 223 | ||
219 | set_current_state(TASK_INTERRUPTIBLE); | 224 | set_current_state(TASK_INTERRUPTIBLE); |
220 | /* | 225 | /* |
@@ -223,7 +228,7 @@ static int watchdog(void *__bind_cpu) | |||
223 | * debug-printout triggers in softlockup_tick(). | 228 | * debug-printout triggers in softlockup_tick(). |
224 | */ | 229 | */ |
225 | while (!kthread_should_stop()) { | 230 | while (!kthread_should_stop()) { |
226 | touch_softlockup_watchdog(); | 231 | __touch_softlockup_watchdog(); |
227 | schedule(); | 232 | schedule(); |
228 | 233 | ||
229 | if (kthread_should_stop()) | 234 | if (kthread_should_stop()) |