aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/lib
diff options
context:
space:
mode:
authorMichal Hocko <mhocko@suse.com>2016-04-07 11:12:30 -0400
committerIngo Molnar <mingo@kernel.org>2016-04-13 04:42:22 -0400
commit664b4e24c6145830885e854195376351b0eb3eee (patch)
treef82c5b229e33eb1c848085bc75d3fca4e885791c /arch/x86/lib
parent4edab14ec66fae5b3c7c4969295facf70365f39d (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.S8
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
107ENDPROC(call_rwsem_down_write_failed) 107ENDPROC(call_rwsem_down_write_failed)
108 108
109ENTRY(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
115ENDPROC(call_rwsem_down_write_failed_killable)
116
109ENTRY(call_rwsem_wake) 117ENTRY(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 */