> When nohz_full CPU stops tick in tick_nohz_irq_exit(), > It wouldn't be chosen to perform idle load balancing because it doesn't > call nohz_balance_enter_idle() in tick_nohz_idle_stop_tick() when it > becomes idle. > > tick_nohz_idle_stop_tick() is only called in idle state and > nohz_balance_enter_idle() tracks the CPU which is part of nohz.idle_cpus_mask > with rq->nohz_tick_stopped. > > Change tick_nohz_idle_stop_tick() to call nohz_balance_enter_idle() > without checking !was_stopped so that nohz_full cpu can be chosen to > perform idle load balancing when it enters idle state. Would you eventually like to add the tag “Fixes” once more? … > +++ b/kernel/time/tick-sched.c > @@ -1228,8 +1228,10 @@ void tick_nohz_idle_stop_tick(void) > ts->idle_sleeps++; > ts->idle_expires = expires; > > - if (!was_stopped && tick_sched_flag_test(ts, TS_FLAG_STOPPED)) { > - ts->idle_jiffies = ts->last_jiffies; > + if (tick_sched_flag_test(ts, TS_FLAG_STOPPED)) { > + if (!was_stopped) > + ts->idle_jiffies = ts->last_jiffies; > + > nohz_balance_enter_idle(cpu); > } … I interpret these diff data in the way that you propose to reorder two condition checks. But I wonder still how “good” the presented change description fits to the suggested source code adjustment. Regards, Markus