From ff26a3a928fbd7f311cb9ac751c6e4eb87ff88e7 Mon Sep 17 00:00:00 2001 From: Ingo Molnar Date: Fri, 3 Jul 2009 08:30:27 -0500 Subject: [PATCH 143/352] stop_machine: convert stop_machine_run() to PREEMPT_RT Instead of playing with non-preemption, introduce explicit startup serialization. This is more robust and cleaner as well. Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner [bigeasy: XXX: stopper_lock -> stop_cpus_lock] --- kernel/stop_machine.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/kernel/stop_machine.c b/kernel/stop_machine.c index 9b8cd7e..ca834ec 100644 --- a/kernel/stop_machine.c +++ b/kernel/stop_machine.c @@ -475,6 +475,16 @@ static void cpu_stopper_thread(unsigned int cpu) struct cpu_stop_done *done = work->done; int ret; + /* + * Wait until the stopper finished scheduling on all + * cpus + */ + lg_global_lock(&stop_cpus_lock); + /* + * Let other cpu threads continue as well + */ + lg_global_unlock(&stop_cpus_lock); + /* cpu stop callbacks must not sleep, make in_atomic() == T */ preempt_count_inc(); ret = fn(arg); -- 2.7.4