diff options
author | Jens Axboe <axboe@kernel.dk> | 2020-10-09 16:01:33 -0600 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2020-12-12 09:17:38 -0700 |
commit | 03941ccfda161c2680147fa5ab92aead2a79cac1 (patch) | |
tree | 4284c9761e14e484ee720e63f2e9221ccc1c9d00 /kernel/task_work.c | |
parent | f50a7052f5e70ee7a6a5e2ed08660994dc3df2a5 (diff) | |
download | lwn-03941ccfda161c2680147fa5ab92aead2a79cac1.tar.gz lwn-03941ccfda161c2680147fa5ab92aead2a79cac1.zip |
task_work: remove legacy TWA_SIGNAL path
All archs now support TIF_NOTIFY_SIGNAL.
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'kernel/task_work.c')
-rw-r--r-- | kernel/task_work.c | 30 |
1 files changed, 1 insertions, 29 deletions
diff --git a/kernel/task_work.c b/kernel/task_work.c index 15b087286bea..9cde961875c0 100644 --- a/kernel/task_work.c +++ b/kernel/task_work.c @@ -5,34 +5,6 @@ static struct callback_head work_exited; /* all we need is ->next == NULL */ -/* - * 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) -{ -#if defined(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 -} - /** * task_work_add - ask the @task to execute @work->func() * @task: the task which should run the callback @@ -76,7 +48,7 @@ int task_work_add(struct task_struct *task, struct callback_head *work, set_notify_resume(task); break; case TWA_SIGNAL: - task_work_notify_signal(task); + set_notify_signal(task); break; default: WARN_ON_ONCE(1); |