forked from swarren/WSL2-Linux-Kernel
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[PATCH] Clean up read write lock assembly
- Move the slow path fallbacks to their own assembly files This makes them much easier to read and is needed for the next change. - Add CFI annotations for unwinding (XXX need review) - Remove constant case which can never happen with out of line spinlocks - Use patchable LOCK prefixes - Don't use lock sections anymore for inline code because they can't be expressed by the unwinder (this adds one taken jump to the lock fast path) Cc: jbeulich@novell.com Signed-off-by: Andi Kleen <ak@suse.de>
- Loading branch information
Andi Kleen
authored and
Andi Kleen
committed
Sep 26, 2006
1 parent
b4062b1
commit 9a0b26e
Showing
5 changed files
with
51 additions
and
98 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
/* 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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters