From 49bdde7dd6145e67ed538f25ff3e4ce9b6a44683 Mon Sep 17 00:00:00 2001 From: "Serge E. Hallyn" Date: Sun, 25 Jun 2006 05:49:08 -0700 Subject: [PATCH] --- yaml --- r: 29799 b: refs/heads/master c: 8bdd1d1250d55afe403ac4affa6ccc5f9e60468f h: refs/heads/master i: 29797: 93d87705c9a6de3799e4c2f9e25acd39ec8900ef 29795: f6d3135b3668ce465d3f4045462e47ddf118dacc 29791: 554e3bc3ad3c96740ac27f5dd224f2976f0f9bb6 v: v3 --- [refs] | 2 +- trunk/kernel/stop_machine.c | 17 +++++++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/[refs] b/[refs] index 691c34949200..d3a2b8831ab1 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 2b943cf09d75c0dfbfd22548988df48f6c24c727 +refs/heads/master: 8bdd1d1250d55afe403ac4affa6ccc5f9e60468f diff --git a/trunk/kernel/stop_machine.c b/trunk/kernel/stop_machine.c index dcfb5d731466..2c0aacc37c55 100644 --- a/trunk/kernel/stop_machine.c +++ b/trunk/kernel/stop_machine.c @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -25,13 +26,11 @@ static unsigned int stopmachine_num_threads; static atomic_t stopmachine_thread_ack; static DECLARE_MUTEX(stopmachine_mutex); -static int stopmachine(void *cpu) +static int stopmachine(void *unused) { int irqs_disabled = 0; int prepared = 0; - set_cpus_allowed(current, cpumask_of_cpu((int)(long)cpu)); - /* Ack: we are alive */ smp_mb(); /* Theoretically the ack = 0 might not be on this CPU yet. */ atomic_inc(&stopmachine_thread_ack); @@ -85,7 +84,8 @@ static void stopmachine_set_state(enum stopmachine_state state) static int stop_machine(void) { - int i, ret = 0; + int ret = 0; + unsigned int i; struct sched_param param = { .sched_priority = MAX_RT_PRIO-1 }; /* One high-prio thread per cpu. We'll do this one. */ @@ -96,11 +96,16 @@ static int stop_machine(void) stopmachine_state = STOPMACHINE_WAIT; for_each_online_cpu(i) { + struct task_struct *tsk; if (i == raw_smp_processor_id()) continue; - ret = kernel_thread(stopmachine, (void *)(long)i,CLONE_KERNEL); - if (ret < 0) + tsk = kthread_create(stopmachine, NULL, "stopmachine"); + if (IS_ERR(tsk)) { + ret = PTR_ERR(tsk); break; + } + kthread_bind(tsk, i); + wake_up_process(tsk); stopmachine_num_threads++; }