Kirill Tkhai
0aa1125fa8
locking/rwsem-spinlock: Add killable versions of __down_read()
Rename __down_read() in __down_read_common() and teach it
to abort waiting in case of pending signals and killable
state argument passed.
Note, that we shouldn't wake anybody up in EINTR path, as:
We check for signal_pending_state() after (!waiter.task)
test and under spinlock. So, current task wasn't able to
be woken up. It may be in two cases: a writer is owner
of the sem, or a writer is a first waiter of the sem.
If a writer is owner of the sem, no one else may work
with it in parallel. It will wake somebody, when it
call up_write() or downgrade_write().
If a writer is the first waiter, it will be woken up,
when the last active reader releases the sem, and
sem->count became 0.
Also note, that set_current_state() may be moved down
to schedule() (after !waiter.task check), as all
assignments in this type of semaphore (including wake_up),
occur under spinlock, so we can't miss anything.
Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: arnd@arndb.de
Cc: avagin@virtuozzo.com
Cc: davem@davemloft.net
Cc: fenghua.yu@intel.com
Cc: gorcunov@virtuozzo.com
Cc: heiko.carstens@de.ibm.com
Cc: hpa@zytor.com
Cc: ink@jurassic.park.msu.ru
Cc: mattst88@gmail.com
Cc: rth@twiddle.net
Cc: schwidefsky@de.ibm.com
Cc: tony.luck@intel.com
Link: http://lkml.kernel.org/r/149789533283.9059.9829416940494747182.stgit@localhost.localdomain
Signed-off-by: Ingo Molnar <mingo@kernel.org>
2017-08-10 12:28:55 +02:00
..
2017-07-29 23:29:41 -07:00
2017-08-02 17:16:12 -07:00
2017-06-09 11:47:38 +02:00
2017-03-02 08:42:34 +01:00
2017-07-21 11:12:48 -07:00
2017-05-12 15:57:15 -07:00
2017-07-27 15:40:02 +02:00
2017-06-20 10:42:19 +02:00
2017-08-10 12:28:55 +02:00
2017-07-10 15:16:21 -07:00
2017-07-05 11:11:26 -07:00
2017-06-08 18:52:45 -07:00
2017-08-10 12:28:53 +02:00
2017-08-01 14:20:53 +02:00
2017-07-20 09:27:29 -04:00
2015-10-21 15:18:35 +01:00
2017-03-02 08:42:39 +01:00
2017-05-23 10:01:37 +02:00
2017-05-03 11:05:15 -07:00
2017-05-03 11:05:15 -07:00
2017-05-03 11:05:15 -07:00
2017-07-20 10:22:26 -07:00
2017-06-12 18:07:43 -04:00
2017-05-02 10:16:05 -04:00
2017-07-05 11:24:05 -07:00
2017-01-12 07:01:56 -07:00
2017-07-06 20:57:13 -07:00
2016-12-24 11:46:01 -08:00
2015-11-24 09:56:43 +01:00
2017-07-11 22:25:44 +02:00
2017-07-12 16:26:00 -07:00
2017-05-18 10:30:19 -06:00
2017-03-02 08:42:39 +01:00
2017-07-10 16:32:36 -07:00
2017-07-10 16:32:35 -07:00
2017-07-12 16:26:03 -07:00
2016-07-28 16:07:41 -07:00
2016-12-24 11:46:01 -08:00
2017-08-10 12:20:53 +02:00
2017-07-10 16:32:34 -07:00
2017-05-08 17:15:10 -07:00
2015-11-23 09:44:58 +01:00
2017-05-26 10:10:45 +02:00
2017-07-10 16:32:34 -07:00
2017-07-12 16:26:01 -07:00
2016-10-25 11:31:51 +02:00
2017-05-08 17:15:12 -07:00
2017-07-12 16:26:00 -07:00
2017-07-12 16:26:02 -07:00
2017-07-12 16:26:02 -07:00
2017-07-12 16:26:00 -07:00
2017-07-14 15:05:13 -07:00
2017-07-08 11:05:35 +02:00
2017-07-12 16:25:59 -07:00
2017-03-17 10:18:47 -04:00
2017-03-02 08:42:39 +01:00
2017-07-12 16:26:02 -07:00
2017-01-23 11:32:16 -08:00
2017-07-06 16:24:32 -07:00
2016-04-11 22:43:43 +01:00
2017-07-12 17:22:01 -07:00
2017-02-24 17:46:56 -08:00
2017-03-13 15:57:41 -03:00
2017-05-26 10:10:37 +02:00
2017-03-02 08:42:34 +01:00
2017-04-18 10:37:13 +02:00
2017-05-13 17:26:01 -05:00
2017-08-02 16:34:46 -07:00
2017-03-02 08:42:39 +01:00
2017-05-23 07:40:44 -05:00
2017-05-02 11:38:06 -07:00
2016-04-14 12:56:09 -07:00
2017-06-26 09:24:00 -07:00
2017-08-06 11:48:27 -07:00
2017-05-23 10:01:32 +02:00
2017-03-02 08:42:35 +01:00
2016-03-01 20:36:56 +01:00
2017-04-11 09:06:32 +02:00
2017-03-08 09:18:02 +01:00
2017-05-26 10:10:36 +02:00
2016-12-22 22:58:37 -05:00
2017-07-12 09:15:00 -07:00
2017-07-12 16:26:00 -07:00
2017-07-12 16:26:02 -07:00
2016-08-02 19:35:02 -04:00
2017-05-08 17:15:12 -07:00
2017-03-02 08:42:27 +01:00
2017-03-02 08:42:35 +01:00
2017-03-02 08:42:39 +01:00
2017-03-06 15:26:37 -06:00
2017-03-02 08:42:31 +01:00
2016-09-05 13:52:39 +02:00
2017-03-02 08:42:29 +01:00
2017-03-02 08:42:29 +01:00
2017-03-03 01:45:36 +01:00
2017-03-02 08:42:38 +01:00
2017-07-12 16:26:02 -07:00
2017-07-14 15:05:13 -07:00
2016-03-02 10:28:47 -05:00
2017-07-28 11:05:52 -04:00