| /* Slow paths of read/write spinlocks. */ | 
 |  | 
 | #include <linux/linkage.h> | 
 | #include <asm/rwlock.h> | 
 | #include <asm/alternative-asm.i> | 
 | #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) |