https://github.com/torvalds/linux
Raw File
Tip revision: 9bf1a2445f3c569098b8de7097ca324e65abecc2 authored by Linus Torvalds on 15 November 2008, 21:42:56 UTC
Linux 2.6.28-rc5
Tip revision: 9bf1a24
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