https://github.com/torvalds/linux
Raw File
Tip revision: c8ddb2713c624f432fa5fe3c7ecffcdda46ea0d4 authored by Linus Torvalds on 01 November 2010, 11:54:12 UTC
Linux 2.6.37-rc1
Tip revision: c8ddb27
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