On Wed, Aug 19, 2020 at 02:37:58PM +0200, Sebastian Andrzej Siewior wrote: > I don't see a significant reason why this lock should become a > raw_spinlock_t therefore I suggest to move it after the > tsk_is_pi_blocked() check. > Any feedback on this vs raw_spinlock_t? > > Signed-off-by: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx> > --- > fs/io-wq.c | 8 ++++---- > kernel/sched/core.c | 10 +++++----- > 2 files changed, 9 insertions(+), 9 deletions(-) > > diff --git a/kernel/sched/core.c b/kernel/sched/core.c > index 3bbb60b97c73c..b76c0f27bd95e 100644 > --- a/kernel/sched/core.c > +++ b/kernel/sched/core.c > @@ -4694,18 +4694,18 @@ static inline void sched_submit_work(struct task_struct *tsk) > * in the possible wakeup of a kworker and because wq_worker_sleeping() > * requires it. > */ > - if (tsk->flags & (PF_WQ_WORKER | PF_IO_WORKER)) { > + if (tsk->flags & PF_WQ_WORKER) { > preempt_disable(); > - if (tsk->flags & PF_WQ_WORKER) > - wq_worker_sleeping(tsk); > - else > - io_wq_worker_sleeping(tsk); > + wq_worker_sleeping(tsk); > preempt_enable_no_resched(); > } > > if (tsk_is_pi_blocked(tsk)) > return; > > + if (tsk->flags & PF_IO_WORKER) > + io_wq_worker_sleeping(tsk); > + Urgh, so this adds a branch in what is normally considered a fairly hot path. I'm thinking that the raw_spinlock_t option would permit leaving that single: if (tsk->flags & (PF_WQ_WORKER | PF_IO_WORKER)) branch intact?