On 09/12, Peter Zijlstra wrote: > > --- a/kernel/stop_machine.c > +++ b/kernel/stop_machine.c > @@ -121,6 +121,11 @@ int stop_one_cpu(unsigned int cpu, cpu_stop_fn_t fn, > void *arg) > cpu_stop_init_done(&done, 1); > if (!cpu_stop_queue_work(cpu, &work)) > return -ENOENT; > + /* > + * In case @cpu == smp_proccessor_id() we can avoid a sleep+wakeup > + * by doing a preemption. > + */ > + cond_resched();
Yes, this is what I tried to suggest too. But this leads to the question which I wanted to ask many times. Why cond_resched() is not NOP if CONFIG_PREEMPT=y ? Perhaps we have some users like, just for example, preempt_enable_no_resched(); cond_resched(); which actually want the should_resched() check even if CONFIG_PREEMPT, but most callers do not? Oleg.