From fbc0b4595aeccc2cc03e292ac8743565b3d3037b Mon Sep 17 00:00:00 2001 From: Con Kolivas Date: Mon, 20 Nov 2017 17:12:49 +1100 Subject: MuQSS version 0.162 CPU scheduler. --- kernel/sched/idle.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'kernel/sched/idle.c') diff --git a/kernel/sched/idle.c b/kernel/sched/idle.c index 257f4f0b4532..34833f395cb5 100644 --- a/kernel/sched/idle.c +++ b/kernel/sched/idle.c @@ -209,6 +209,9 @@ exit_idle: */ static void do_idle(void) { + int cpu = smp_processor_id(); + bool pending = false; + /* * If the arch has a polling bit, we maintain an invariant: * @@ -220,13 +223,16 @@ static void do_idle(void) __current_set_polling(); quiet_vmstat(); - tick_nohz_idle_enter(); + if (unlikely(softirq_pending(cpu))) + pending = true; + else + tick_nohz_idle_enter(); while (!need_resched()) { check_pgt_cache(); rmb(); - if (cpu_is_offline(smp_processor_id())) { + if (cpu_is_offline(cpu)) { cpuhp_report_idle_dead(); arch_cpu_idle_dead(); } @@ -255,7 +261,8 @@ static void do_idle(void) * an IPI to fold the state for us. */ preempt_set_need_resched(); - tick_nohz_idle_exit(); + if (!pending) + tick_nohz_idle_exit(); __current_clr_polling(); /* -- cgit v1.2.3