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-07-31 17:19:47 -07:00
2020-08-03 11:57:03 -07:00
2020-04-07 10:43:42 -07:00
2020-07-09 20:09:28 -07:00
2020-07-14 15:46:32 +02:00
2020-07-28 13:18:01 +02:00
2020-06-14 01:57:21 +09:00
2020-07-27 16:20:40 +02:00
2020-08-01 09:26:27 +02:00
2020-05-11 00:31:38 +02:00
2020-08-03 14:39:35 -07:00
2020-06-14 01:57:21 +09:00
2020-06-21 20:47:20 -07:00
2020-07-31 00:15:53 +02:00
2020-08-03 14:58:38 -07:00
2020-08-03 14:58:38 -07:00
2020-08-03 14:51:09 -07:00
2020-03-25 11:50:48 +01:00
2020-06-09 09:39:14 -07:00
2020-03-23 18:19:06 +01:00
2020-04-06 08:58:42 -07:00
2020-07-29 12:35:36 -07:00
2020-07-29 10:00:36 -04:00
2020-04-22 15:23:10 -04:00
2020-07-29 10:00:36 -04:00
2020-05-01 12:35:21 +10:00
2020-02-04 03:05:26 +00:00
2020-06-11 15:14:36 +02:00
2020-05-15 11:44:34 -07:00
2020-06-03 13:06:42 -07:00
2020-07-02 17:56:11 +01:00
2020-04-15 11:21:54 +02:00
2020-05-20 14:44:21 -05:00
2019-09-25 17:51:39 -07:00
2020-06-09 09:39:14 -07:00
2020-04-07 10:43:42 -07:00
2020-08-03 14:58:38 -07:00
2019-10-06 09:11:37 -06:00
2020-07-18 01:56:09 +02:00
2020-06-06 23:42:01 +09:00
2020-06-02 10:59:11 -07:00
2020-06-08 11:05:56 -07:00
2020-05-28 10:54:15 +02:00
2019-08-29 15:10:10 +01:00
2020-07-28 13:18:01 +02:00
2020-03-25 10:04:01 -05:00
2019-12-08 14:37:36 +01:00
2019-11-12 11:35:32 +01:00
2020-06-10 19:14:17 -07:00
2020-01-08 16:32:55 +00:00
2019-09-06 23:58:44 +02:00
2020-06-26 00:27:36 -07:00
2020-01-08 16:32:55 +00:00
2020-01-08 16:32:55 +00:00
2020-04-10 15:36:22 -07:00
2020-07-28 13:19:05 +02:00
2020-07-08 11:38:59 +02:00
2020-04-27 02:07:40 -04:00
2020-06-13 09:56:21 -07:00
2020-07-09 13:09:30 -07:00
2020-06-02 10:59:12 -07:00
2020-06-17 00:33:12 +02:00
2020-07-23 17:34:18 +10:00
2020-06-11 15:14:36 +02:00
2019-08-19 21:54:16 -07:00
2020-06-03 16:27:18 -07:00
2020-04-30 06:40:14 -05:00
2020-02-04 03:05:26 +00:00
2020-01-18 13:51:39 +01:00
2020-07-01 12:09:13 +03:00
2020-06-09 09:39:14 -07:00
2020-05-27 11:10:05 +02:00
2019-12-25 10:41:20 +01:00
2020-06-04 16:14:56 +01:00
2020-04-27 02:07:40 -04:00
2020-08-13 09:01:38 -06:00
2020-07-22 10:22:04 +02:00
2020-07-10 12:00:02 +02:00
2019-11-11 10:30:59 +01:00
2020-01-17 10:19:21 +01:00
2019-11-15 14:38:30 +01:00
2020-06-14 11:39:31 -07:00
2019-11-26 13:03:56 -06:00
2020-01-09 16:42:29 -07:00
2020-07-29 13:51:47 +02:00
2020-08-13 09:01:38 -06:00
2019-12-04 15:18:39 +01:00
2020-06-29 12:01:45 -07:00
2019-12-18 18:07:31 +01:00
2020-04-07 21:51:27 +02:00
2020-05-15 13:48:59 -07:00
2020-02-07 15:34:12 +01:00
2020-05-09 13:57:12 +02:00
2020-06-04 19:06:24 -07:00
2020-04-27 02:07:40 -04:00
2020-05-09 13:57:12 +02:00
2020-06-13 09:56:21 -07:00
2020-06-08 11:05:56 -07:00
2020-06-17 10:57:41 -07:00