aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/sched.c
diff options
context:
space:
mode:
authorHeiko Carstens <heiko.carstens@de.ibm.com>2006-06-25 08:49:10 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2006-06-25 13:01:22 -0400
commitfc75cdfa5b43ac4d3232b490800cd35063adafd3 (patch)
tree0529ffd9633667457d5340a09b3cb352d09436d2 /kernel/sched.c
parent04a3446c90137a473837288b04b517b19dc67a0d (diff)
[PATCH] cpu hotplug: fix CPU_UP_CANCEL handling
If a cpu hotplug callback fails on CPU_UP_PREPARE, all callbacks will be called with CPU_UP_CANCELED. A few of these callbacks assume that on CPU_UP_PREPARE a pointer to task has been stored in a percpu array. This assumption is not true if CPU_UP_PREPARE fails and the following calls to kthread_bind() in CPU_UP_CANCELED will cause an addressing exception because of passing a NULL pointer. Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com> Cc: Ashok Raj <ashok.raj@intel.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'kernel/sched.c')
-rw-r--r--kernel/sched.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/kernel/sched.c b/kernel/sched.c
index f8d540b324ca..f06d059edef5 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -4756,6 +4756,8 @@ static int migration_call(struct notifier_block *nfb, unsigned long action,
4756 break; 4756 break;
4757#ifdef CONFIG_HOTPLUG_CPU 4757#ifdef CONFIG_HOTPLUG_CPU
4758 case CPU_UP_CANCELED: 4758 case CPU_UP_CANCELED:
4759 if (!cpu_rq(cpu)->migration_thread)
4760 break;
4759 /* Unbind it from offline cpu so it can run. Fall thru. */ 4761 /* Unbind it from offline cpu so it can run. Fall thru. */
4760 kthread_bind(cpu_rq(cpu)->migration_thread, 4762 kthread_bind(cpu_rq(cpu)->migration_thread,
4761 any_online_cpu(cpu_online_map)); 4763 any_online_cpu(cpu_online_map));