X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=kernel%2Fstop_machine.c;h=dcfb5d731466257f7f003ba5eb84083f0185d22c;hb=f709b122343fb9a010b6cf2d5559641f1820f7c9;hp=84a9d18aa8da0ecb9309c6b58a2b8b694a1493e2;hpb=f45727d52d1581e9ff4df9d1a12a60789ad2d1eb;p=powerpc.git diff --git a/kernel/stop_machine.c b/kernel/stop_machine.c index 84a9d18aa8..dcfb5d7314 100644 --- a/kernel/stop_machine.c +++ b/kernel/stop_machine.c @@ -87,13 +87,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 *)¶m); - set_fs(old_fs); + sched_setscheduler(current, SCHED_FIFO, ¶m); atomic_set(&stopmachine_thread_ack, 0); stopmachine_num_threads = 0; @@ -119,13 +115,12 @@ static int stop_machine(void) return ret; } - /* Don't schedule us away at this point, please. */ - local_irq_disable(); - /* Now they are all started, make them hold the CPUs, ready. */ + preempt_disable(); stopmachine_set_state(STOPMACHINE_PREPARE); /* Make them disable irqs. */ + local_irq_disable(); stopmachine_set_state(STOPMACHINE_DISABLE_IRQ); return 0; @@ -135,6 +130,7 @@ static void restart_machine(void) { stopmachine_set_state(STOPMACHINE_EXIT); local_irq_enable(); + preempt_enable_no_resched(); } struct stop_machine_data