On Tue, Dec 10, 2019 at 10:26:01AM +0100, Peter Zijlstra wrote: > > @@ -6716,7 +6737,7 @@ static void check_preempt_wakeup(struct rq *rq, struct task_struct *p, int wake_ > > find_matching_se(&se, &pse); > > update_curr(cfs_rq_of(se)); > > BUG_ON(!pse); > > - if (wakeup_preempt_entity(se, pse) == 1) { > > + if (wakeup_preempt_entity(se, pse) == 1 || kthread_wakeup_preempt(rq, p, wake_flags)) { > > /* > > * Bias pick_next to pick the sched entity that is > > * triggering this preemption. > > How about something like: > if (wakeup_preempt_entity(se, pse) >= !(wake_flags & WF_KTHREAD)) That's a slightly less convoluted expression for the same value :-)