Files
erofs-linux/kernel
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 <[email protected]>
Cc: Jann Horn <[email protected]>
Acked-by: Oleg Nesterov <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
2020-08-13 09:01:38 -06: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-05-09 13:57:12 +02:00
2020-06-04 19:06:24 -07:00
2020-05-09 13:57:12 +02:00