Fixes and cleanups for earlyprintk aka boot console
[powerpc.git] / kernel / stop_machine.c
index b3d4dc8..daabb74 100644 (file)
@@ -1,8 +1,12 @@
-#include <linux/stop_machine.h>
-#include <linux/kthread.h>
-#include <linux/sched.h>
+/* Copyright 2005 Rusty Russell rusty@rustcorp.com.au IBM Corporation.
+ * GPL v2 and any later version.
+ */
 #include <linux/cpu.h>
 #include <linux/err.h>
+#include <linux/kthread.h>
+#include <linux/module.h>
+#include <linux/sched.h>
+#include <linux/stop_machine.h>
 #include <linux/syscalls.h>
 #include <asm/atomic.h>
 #include <asm/semaphore.h>
@@ -87,13 +91,9 @@ static int stop_machine(void)
 {
        int i, ret = 0;
        struct sched_param param = { .sched_priority = MAX_RT_PRIO-1 };
-       mm_segment_t old_fs = get_fs();
 
        /* One high-prio thread per cpu.  We'll do this one. */
-       set_fs(KERNEL_DS);
-       sys_sched_setscheduler(current->pid, SCHED_FIFO,
-                               (struct sched_param __user *)&param);
-       set_fs(old_fs);
+       sched_setscheduler(current, SCHED_FIFO, &param);
 
        atomic_set(&stopmachine_thread_ack, 0);
        stopmachine_num_threads = 0;
@@ -115,7 +115,6 @@ static int stop_machine(void)
        /* If some failed, kill them all. */
        if (ret < 0) {
                stopmachine_set_state(STOPMACHINE_EXIT);
-               up(&stopmachine_mutex);
                return ret;
        }
 
@@ -210,3 +209,4 @@ int stop_machine_run(int (*fn)(void *), void *data, unsigned int cpu)
 
        return ret;
 }
+EXPORT_SYMBOL_GPL(stop_machine_run);