sched/idle: Simplify wake_up_idle_cpu()
Now that rq->idle's polling bit is a reliable indication that the cpu is polling, use it. Signed-off-by: Andy Lutomirski <luto@amacapital.net> Signed-off-by: Peter Zijlstra <peterz@infradead.org> Cc: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Cc: nicolas.pitre@linaro.org Cc: daniel.lezcano@linaro.org Cc: umgwanakikbuti@gmail.com Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: linux-kernel@vger.kernel.org Link: http://lkml.kernel.org/r/922f00761445a830ebb23d058e2ae53956ce2d73.1401902905.git.luto@amacapital.net Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
Родитель
82c65d60d6
Коммит
67b9ca70c3
|
@ -628,26 +628,7 @@ static void wake_up_idle_cpu(int cpu)
|
|||
if (cpu == smp_processor_id())
|
||||
return;
|
||||
|
||||
/*
|
||||
* This is safe, as this function is called with the timer
|
||||
* wheel base lock of (cpu) held. When the CPU is on the way
|
||||
* to idle and has not yet set rq->curr to idle then it will
|
||||
* be serialized on the timer wheel base lock and take the new
|
||||
* timer into account automatically.
|
||||
*/
|
||||
if (rq->curr != rq->idle)
|
||||
return;
|
||||
|
||||
/*
|
||||
* We can set TIF_RESCHED on the idle task of the other CPU
|
||||
* lockless. The worst case is that the other CPU runs the
|
||||
* idle task through an additional NOOP schedule()
|
||||
*/
|
||||
set_tsk_need_resched(rq->idle);
|
||||
|
||||
/* NEED_RESCHED must be visible before we test polling */
|
||||
smp_mb();
|
||||
if (!tsk_is_polling(rq->idle))
|
||||
if (set_nr_and_not_polling(rq->idle))
|
||||
smp_send_reschedule(cpu);
|
||||
else
|
||||
trace_sched_wake_idle_without_ipi(cpu);
|
||||
|
|
Загрузка…
Ссылка в новой задаче