1/* Slow paths of read/write spinlocks. */ 2 3#include <linux/linkage.h> 4#include <asm/rwlock.h> 5#include <asm/alternative-asm.h> 6#include <asm/dwarf2.h> 7 8/* rdi: pointer to rwlock_t */ 9ENTRY(__write_lock_failed) 10 CFI_STARTPROC 11 LOCK_PREFIX 12 addl $RW_LOCK_BIAS,(%rdi) 131: rep 14 nop 15 cmpl $RW_LOCK_BIAS,(%rdi) 16 jne 1b 17 LOCK_PREFIX 18 subl $RW_LOCK_BIAS,(%rdi) 19 jnz __write_lock_failed 20 ret 21 CFI_ENDPROC 22END(__write_lock_failed) 23 24/* rdi: pointer to rwlock_t */ 25ENTRY(__read_lock_failed) 26 CFI_STARTPROC 27 LOCK_PREFIX 28 incl (%rdi) 291: rep 30 nop 31 cmpl $1,(%rdi) 32 js 1b 33 LOCK_PREFIX 34 decl (%rdi) 35 js __read_lock_failed 36 ret 37 CFI_ENDPROC 38END(__read_lock_failed) 39