On Mon, Oct 05, 2020 at 04:57:32PM +0200, Peter Zijlstra wrote: > +static inline struct task_struct *get_push_task(struct rq *rq) > +{ > + struct task_struct *p = rq->curr; > + > + lockdep_assert_held(&rq->lock); > + > + if (rq->push_busy) > + return NULL; > + > + if (p->nr_cpus_allowed == 1) > + return NULL;
This; that means what when we're stuck below a per-cpu thread, we're toast. There's just nothing much you can do... :/ > + > + rq->push_busy = true; > + return get_task_struct(p); > +}