On Wed, Jul 12, 2017 at 07:17:56PM +0200, Peter Zijlstra wrote: > Could be I'm just not remembering how all that works.. But I was > wondering if we can do the expensive bits if we've decided to actually > go NOHZ and avoid doing it on every idle entry. > > IIRC the RCU fast NOHZ bits try and flush the callback list (or paw it > off to another CPU?) such that we can go NOHZ sooner. Having a !empty > callback list avoid NOHZ from happening. > > Now if we've already decided we can't in fact go NOHZ due to other > concerns, flushing the callback list is pointless work. So I'm thinking > we can find a better place to do this.
I'm a wee bit confused by the split between rcu_prepare_for_idle() and rcu_needs_cpu(). There's a fair amount overlap there.. that said, I'm thinking we should be calling rcu_needs_cpu() as the very last test, not the very first, such that we can bail out of tick_nohz_stop_sched_tick() without having to incur the penalty of flushing callbacks.