On Mon, Oct 05, 2020 at 04:57:20PM +0200, Peter Zijlstra wrote: > +static inline void balance_switch(struct rq *rq) > +{ > + if (unlikely(rq->balance_flags)) { > + /* > + * Run the balance_callbacks, except on hotplug > + * when we need to push the current task away. > + */ > + if (!IS_ENABLED(CONFIG_HOTPLUG_CPU) || > + !(rq->balance_flags & BALANCE_PUSH) || > + !balance_push(rq)) > + __balance_callbacks(rq); > + } > +}
> @@ -1392,12 +1396,13 @@ queue_balance_callback(struct rq *rq, > { > lockdep_assert_held(&rq->lock); > > - if (unlikely(head->next)) > + if (unlikely(head->next || (rq->balance_flags & BALANCE_PUSH))) > return; With this bit from Valentin we can probably simplify the above function, but I've not thought about that yet.