Jens Axboe ebf0d100df task_work: only grab task signal lock when needed
If JOBCTL_TASK_WORK is already set on the targeted task, then we need
not go through {lock,unlock}_task_sighand() to set it again and queue
a signal wakeup. This is safe as we're checking it _after_ adding the
new task_work with cmpxchg().

The ordering is as follows:

task_work_add()				get_signal()
--------------------------------------------------------------
STORE(task->task_works, new_work);	STORE(task->jobctl);
mb();					mb();
LOAD(task->jobctl);			LOAD(task->task_works);

This speeds up TWA_SIGNAL handling quite a bit, which is important now
that io_uring is relying on it for all task_work deliveries.

Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Jann Horn <jannh@google.com>
Acked-by: Oleg Nesterov <oleg@redhat.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
2020-08-13 09:01:38 -06:00
..
2020-08-03 11:57:03 -07:00
2020-07-28 13:18:01 +02:00
2020-08-03 14:58:38 -07:00
2020-08-03 14:51:09 -07:00
\n
2020-04-06 08:58:42 -07:00
2020-07-29 12:35:36 -07:00
2020-06-03 13:06:42 -07:00
2020-08-03 14:58:38 -07:00
2020-07-28 13:18:01 +02:00
2020-01-08 16:32:55 +00:00
2020-07-08 11:38:59 +02:00
2020-07-23 17:34:18 +10:00
2020-07-01 12:09:13 +03:00
2020-06-14 11:39:31 -07:00
2019-12-04 15:18:39 +01:00
2019-12-18 18:07:31 +01:00
2020-05-09 13:57:12 +02:00
2020-06-04 19:06:24 -07:00
2020-05-09 13:57:12 +02:00