https://github.com/torvalds/linux
Raw File
Tip revision: 60b341b778cc2929df16c0a504c91621b3c6a4ad authored by Linus Torvalds on 24 February 2010, 18:52:17 UTC
Linux 2.6.33
Tip revision: 60b341b
rwlock_64.S
/* 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)
back to top