nohz: Use nohz own full kick on 2nd task enqueue

Now that we have a nohz full remote kick based on irq work, lets use
it to notify a CPU that it's exiting single task mode.

This unbloats a bit the scheduler IPI that the nohz code was abusing
for its cool "callable anywhere/anytime" properties.

Acked-by: Peter Zijlstra <peterz@infradead.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Kevin Hilman <khilman@linaro.org>
Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
This commit is contained in:
Frederic Weisbecker 2014-03-18 21:12:53 +01:00
Родитель 53c5fa16b4
Коммит fd2ac4f4a6
2 изменённых файлов: 2 добавлений и 5 удалений

Просмотреть файл

@ -1574,9 +1574,7 @@ void scheduler_ipi(void)
*/ */
preempt_fold_need_resched(); preempt_fold_need_resched();
if (llist_empty(&this_rq()->wake_list) if (llist_empty(&this_rq()->wake_list) && !got_nohz_idle_kick())
&& !tick_nohz_full_cpu(smp_processor_id())
&& !got_nohz_idle_kick())
return; return;
/* /*
@ -1593,7 +1591,6 @@ void scheduler_ipi(void)
* somewhat pessimize the simple resched case. * somewhat pessimize the simple resched case.
*/ */
irq_enter(); irq_enter();
tick_nohz_full_check();
sched_ttwu_pending(); sched_ttwu_pending();
/* /*

Просмотреть файл

@ -1223,7 +1223,7 @@ static inline void add_nr_running(struct rq *rq, unsigned count)
if (tick_nohz_full_cpu(rq->cpu)) { if (tick_nohz_full_cpu(rq->cpu)) {
/* Order rq->nr_running write against the IPI */ /* Order rq->nr_running write against the IPI */
smp_wmb(); smp_wmb();
smp_send_reschedule(rq->cpu); tick_nohz_full_kick_cpu(rq->cpu);
} }
} }
#endif #endif