.2.3'/>
aboutsummaryrefslogtreecommitdiffstats
path: root/xen/arch/x86/rwlock.c
blob: d8c1b7dde5cf5e12d30c06cc5d39c5c67667ca2f (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
#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