123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- #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)
- #ifdef CONFIG_X86_32
- #define save_common_regs \
- pushl %ecx
- #define restore_common_regs \
- popl %ecx
-
- .macro movq src, dst
- .endm
- #else
- #define save_common_regs \
- pushq %rdi; \
- pushq %rsi; \
- pushq %rcx; \
- pushq %r8; \
- pushq %r9; \
- pushq %r10; \
- pushq %r11
- #define restore_common_regs \
- popq %r11; \
- popq %r10; \
- popq %r9; \
- popq %r8; \
- popq %rcx; \
- popq %rsi; \
- popq %rdi
- #endif
- 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_down_write_failed_killable)
- FRAME_BEGIN
- save_common_regs
- movq %rax,%rdi
- call rwsem_down_write_failed_killable
- restore_common_regs
- FRAME_END
- ret
- ENDPROC(call_rwsem_down_write_failed_killable)
- ENTRY(call_rwsem_wake)
- FRAME_BEGIN
-
- __ASM_HALF_SIZE(dec) %__ASM_HALF_REG(dx)
- jnz 1f
- save_common_regs
- movq %rax,%rdi
- call rwsem_wake
- restore_common_regs
- 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)
|