23
23
#include <asm/dwarf2.h>
25
25
#define save_common_regs \
26
pushq_cfi %rdi; CFI_REL_OFFSET rdi, 0; \
27
pushq_cfi %rsi; CFI_REL_OFFSET rsi, 0; \
28
pushq_cfi %rcx; CFI_REL_OFFSET rcx, 0; \
29
pushq_cfi %r8; CFI_REL_OFFSET r8, 0; \
30
pushq_cfi %r9; CFI_REL_OFFSET r9, 0; \
31
pushq_cfi %r10; CFI_REL_OFFSET r10, 0; \
32
pushq_cfi %r11; CFI_REL_OFFSET r11, 0
34
34
#define restore_common_regs \
35
popq_cfi %r11; CFI_RESTORE r11; \
36
popq_cfi %r10; CFI_RESTORE r10; \
37
popq_cfi %r9; CFI_RESTORE r9; \
38
popq_cfi %r8; CFI_RESTORE r8; \
39
popq_cfi %rcx; CFI_RESTORE rcx; \
40
popq_cfi %rsi; CFI_RESTORE rsi; \
41
popq_cfi %rdi; CFI_RESTORE rdi
43
43
/* Fix up special calling conventions */
44
44
ENTRY(call_rwsem_down_read_failed)
48
50
call rwsem_down_read_failed
50
53
restore_common_regs
52
ENDPROC(call_rwsem_down_read_failed)
56
ENDPROC(call_rwsem_down_read_failed)
54
58
ENTRY(call_rwsem_down_write_failed)
57
62
call rwsem_down_write_failed
58
63
restore_common_regs
60
ENDPROC(call_rwsem_down_write_failed)
66
ENDPROC(call_rwsem_down_write_failed)
62
68
ENTRY(call_rwsem_wake)
63
70
decl %edx /* do nothing if still outstanding active readers */
68
75
restore_common_regs
70
ENDPROC(call_rwsem_wake)
78
ENDPROC(call_rwsem_wake)
72
80
/* Fix up special calling conventions */
73
81
ENTRY(call_rwsem_downgrade_wake)
77
87
call rwsem_downgrade_wake
79
90
restore_common_regs
81
ENDPROC(call_rwsem_downgrade_wake)
93
ENDPROC(call_rwsem_downgrade_wake)