|
@@ -15,6 +15,7 @@
|
|
|
|
|
|
#include <linux/linkage.h>
|
|
|
#include <asm/alternative-asm.h>
|
|
|
+#include <asm/frame.h>
|
|
|
|
|
|
#define __ASM_HALF_REG(reg) __ASM_SEL(reg, e##reg)
|
|
|
#define __ASM_HALF_SIZE(inst) __ASM_SEL(inst##w, inst##l)
|
|
@@ -84,24 +85,29 @@
|
|
|
|
|
|
/* Fix up special calling conventions */
|
|
|
ENTRY(call_rwsem_down_read_failed)
|
|
|
+ FRAME_BEGIN
|
|
|
save_common_regs
|
|
|
__ASM_SIZE(push,) %__ASM_REG(dx)
|
|
|
movq %rax,%rdi
|
|
|
call rwsem_down_read_failed
|
|
|
__ASM_SIZE(pop,) %__ASM_REG(dx)
|
|
|
restore_common_regs
|
|
|
+ FRAME_END
|
|
|
ret
|
|
|
ENDPROC(call_rwsem_down_read_failed)
|
|
|
|
|
|
ENTRY(call_rwsem_down_write_failed)
|
|
|
+ FRAME_BEGIN
|
|
|
save_common_regs
|
|
|
movq %rax,%rdi
|
|
|
call rwsem_down_write_failed
|
|
|
restore_common_regs
|
|
|
+ FRAME_END
|
|
|
ret
|
|
|
ENDPROC(call_rwsem_down_write_failed)
|
|
|
|
|
|
ENTRY(call_rwsem_wake)
|
|
|
+ FRAME_BEGIN
|
|
|
/* do nothing if still outstanding active readers */
|
|
|
__ASM_HALF_SIZE(dec) %__ASM_HALF_REG(dx)
|
|
|
jnz 1f
|
|
@@ -109,15 +115,18 @@ ENTRY(call_rwsem_wake)
|
|
|
movq %rax,%rdi
|
|
|
call rwsem_wake
|
|
|
restore_common_regs
|
|
|
-1: ret
|
|
|
+1: FRAME_END
|
|
|
+ ret
|
|
|
ENDPROC(call_rwsem_wake)
|
|
|
|
|
|
ENTRY(call_rwsem_downgrade_wake)
|
|
|
+ FRAME_BEGIN
|
|
|
save_common_regs
|
|
|
__ASM_SIZE(push,) %__ASM_REG(dx)
|
|
|
movq %rax,%rdi
|
|
|
call rwsem_downgrade_wake
|
|
|
__ASM_SIZE(pop,) %__ASM_REG(dx)
|
|
|
restore_common_regs
|
|
|
+ FRAME_END
|
|
|
ret
|
|
|
ENDPROC(call_rwsem_downgrade_wake)
|