1234567891011121314151617181920212223242526272829303132333435363738 |
- /* Slow paths of read/write spinlocks. */
- #include <linux/linkage.h>
- #include <asm/rwlock.h>
- #include <asm/alternative-asm.h>
- #include <asm/dwarf2.h>
- /* rdi: pointer to rwlock_t */
- ENTRY(__write_lock_failed)
- CFI_STARTPROC
- LOCK_PREFIX
- addl $RW_LOCK_BIAS,(%rdi)
- 1: rep
- nop
- cmpl $RW_LOCK_BIAS,(%rdi)
- jne 1b
- LOCK_PREFIX
- subl $RW_LOCK_BIAS,(%rdi)
- jnz __write_lock_failed
- ret
- CFI_ENDPROC
- END(__write_lock_failed)
- /* rdi: pointer to rwlock_t */
- ENTRY(__read_lock_failed)
- CFI_STARTPROC
- LOCK_PREFIX
- incl (%rdi)
- 1: rep
- nop
- cmpl $1,(%rdi)
- js 1b
- LOCK_PREFIX
- decl (%rdi)
- js __read_lock_failed
- ret
- CFI_ENDPROC
- END(__read_lock_failed)
|