blob: 9dd831c963eee938c9be17c3fb811741b9635007 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<#include <asm/atomic.h>
#include <asm/rwlock.h>
#if defined(CONFIG_SMP)
asm(
".align 4\n"
".globl __write_lock_failed\n"
"__write_lock_failed:\n"
" " LOCK "addl $" RW_LOCK_BIAS_STR ",(%"__OP"ax)\n"
"1: rep; nop\n"
" cmpl $" RW_LOCK_BIAS_STR ",(%"__OP"ax)\n"
" jne 1b\n"
" " LOCK "subl $" RW_LOCK_BIAS_STR ",(%"__OP"ax)\n"
" jnz __write_lock_failed\n"
" ret\n"
".align 4\n"
".globl __read_lock_failed\n"
"__read_lock_failed:\n"
" lock ; incl (%"__OP"ax)\n"
"1: rep; nop\n"
" cmpl $1,(%"__OP"ax)\n"
" js 1b\n"
" lock ; decl (%"__OP"ax)\n"
" js __read_lock_failed\n"
" ret\n"
);
#endif
|