On 10/13/20 5:50 PM, Thomas Gleixner wrote: > On Thu, Oct 08 2020 at 09:27, Jens Axboe wrote: >> +/* >> + * TWA_SIGNAL signaling - use TIF_NOTIFY_SIGNAL, if available, as it's faster >> + * than TIF_SIGPENDING as there's no dependency on ->sighand. The latter is >> + * shared for threads, and can cause contention on sighand->lock. Even for >> + * the non-threaded case TIF_NOTIFY_SIGNAL is more efficient, as no locking >> + * or IRQ disabling is involved for notification (or running) purposes. >> + */ >> +static void task_work_notify_signal(struct task_struct *task) >> +{ >> +#ifdef TIF_NOTIFY_SIGNAL >> + set_notify_signal(task); >> +#else >> + unsigned long flags; >> + >> + /* >> + * Only grab the sighand lock if we don't already have some >> + * task_work pending. This pairs with the smp_store_mb() >> + * in get_signal(), see comment there. >> + */ >> + if (!(READ_ONCE(task->jobctl) & JOBCTL_TASK_WORK) && >> + lock_task_sighand(task, &flags)) { >> + task->jobctl |= JOBCTL_TASK_WORK; >> + signal_wake_up(task, 0); >> + unlock_task_sighand(task, &flags); >> + } >> +#endif > > Same #ifdeffery comment as before. Fixed up. -- Jens Axboe