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:
Родитель
53c5fa16b4
Коммит
fd2ac4f4a6
|
@ -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
|
||||||
|
|
Загрузка…
Ссылка в новой задаче