|
@@ -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);
|