diff options
author | Michal Hocko <mhocko@suse.com> | 2016-04-07 11:12:30 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2016-04-13 04:42:22 -0400 |
commit | 664b4e24c6145830885e854195376351b0eb3eee (patch) | |
tree | f82c5b229e33eb1c848085bc75d3fca4e885791c /arch/x86/lib | |
parent | 4edab14ec66fae5b3c7c4969295facf70365f39d (diff) |
locking/rwsem, x86: Provide __down_write_killable()
which uses the same fast path as __down_write() except it falls back to
call_rwsem_down_write_failed_killable() slow path and return -EINTR if
killed. To prevent from code duplication extract the skeleton of
__down_write() into a helper macro which just takes the semaphore
and the slow path function to be called.
Signed-off-by: Michal Hocko <mhocko@suse.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Chris Zankel <chris@zankel.net>
Cc: David S. Miller <davem@davemloft.net>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Max Filippov <jcmvbkbc@gmail.com>
Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Signed-off-by: Davidlohr Bueso <dbueso@suse.de>
Cc: Signed-off-by: Jason Low <jason.low2@hp.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Tony Luck <tony.luck@intel.com>
Cc: linux-alpha@vger.kernel.org
Cc: linux-arch@vger.kernel.org
Cc: linux-ia64@vger.kernel.org
Cc: linux-s390@vger.kernel.org
Cc: linux-sh@vger.kernel.org
Cc: linux-xtensa@linux-xtensa.org
Cc: sparclinux@vger.kernel.org
Link: http://lkml.kernel.org/r/1460041951-22347-11-git-send-email-mhocko@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'arch/x86/lib')
-rw-r--r-- | arch/x86/lib/rwsem.S | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/arch/x86/lib/rwsem.S b/arch/x86/lib/rwsem.S index be110efa0096..4534a7e912f3 100644 --- a/arch/x86/lib/rwsem.S +++ b/arch/x86/lib/rwsem.S | |||
@@ -106,6 +106,14 @@ ENTRY(call_rwsem_down_write_failed) | |||
106 | ret | 106 | ret |
107 | ENDPROC(call_rwsem_down_write_failed) | 107 | ENDPROC(call_rwsem_down_write_failed) |
108 | 108 | ||
109 | ENTRY(call_rwsem_down_write_failed_killable) | ||
110 | save_common_regs | ||
111 | movq %rax,%rdi | ||
112 | call rwsem_down_write_failed_killable | ||
113 | restore_common_regs | ||
114 | ret | ||
115 | ENDPROC(call_rwsem_down_write_failed_killable) | ||
116 | |||
109 | ENTRY(call_rwsem_wake) | 117 | ENTRY(call_rwsem_wake) |
110 | FRAME_BEGIN | 118 | FRAME_BEGIN |
111 | /* do nothing if still outstanding active readers */ | 119 | /* do nothing if still outstanding active readers */ |