Messages in this thread Patch in this message |  | | Date | Wed, 6 Feb 2013 20:40:32 +0800 | Subject | [PATCH 3/3] stop_machine: wake up stopper thread lazily | From | Hillf Danton <> |
| |
Ring no bell if the stopper thread is busy in handling enqueued works.
Signed-off-by: Hillf Danton <dhillf@gmail.com> ---
--- a/kernel/stop_machine.c Wed Feb 6 20:05:44 2013 +++ b/kernel/stop_machine.c Wed Feb 6 20:06:56 2013 @@ -72,8 +72,10 @@ static void cpu_stop_queue_work(struct c spin_lock_irqsave(&stopper->lock, flags);
if (stopper->enabled) { + int wakeup = list_empty(&stopper->works); list_add_tail(&work->list, &stopper->works); - wake_up_process(stopper->thread); + if (wakeup) + wake_up_process(stopper->thread); } else cpu_stop_signal_done(work->done, false, 0);
--
|  |