diff options
author | Andi Kleen <ak@suse.de> | 2006-09-26 04:52:28 -0400 |
---|---|---|
committer | Andi Kleen <andi@basil.nowhere.org> | 2006-09-26 04:52:28 -0400 |
commit | 9a0b26e6bc4ae1979d9bcc6194e57a71b2b5cac6 (patch) | |
tree | 01601a502007b85d4fc88f79de7a93c257ef9d97 /include/asm-x86_64/spinlock.h | |
parent | b4062b16094038334d9bbadac0397a3fc9e981b0 (diff) |
[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>
Diffstat (limited to 'include/asm-x86_64/spinlock.h')
-rw-r--r-- | include/asm-x86_64/spinlock.h | 11 |
1 files changed, 2 insertions, 9 deletions
diff --git a/include/asm-x86_64/spinlock.h b/include/asm-x86_64/spinlock.h index 248a79f0eaff..a8e3d89f591f 100644 --- a/include/asm-x86_64/spinlock.h +++ b/include/asm-x86_64/spinlock.h | |||
@@ -79,13 +79,6 @@ static inline void __raw_spin_unlock(raw_spinlock_t *lock) | |||
79 | * | 79 | * |
80 | * On x86, we implement read-write locks as a 32-bit counter | 80 | * On x86, we implement read-write locks as a 32-bit counter |
81 | * with the high bit (sign) being the "contended" bit. | 81 | * with the high bit (sign) being the "contended" bit. |
82 | * | ||
83 | * The inline assembly is non-obvious. Think about it. | ||
84 | * | ||
85 | * Changed to use the same technique as rw semaphores. See | ||
86 | * semaphore.h for details. -ben | ||
87 | * | ||
88 | * the helpers are in arch/i386/kernel/semaphore.c | ||
89 | */ | 82 | */ |
90 | 83 | ||
91 | #define __raw_read_can_lock(x) ((int)(x)->lock > 0) | 84 | #define __raw_read_can_lock(x) ((int)(x)->lock > 0) |
@@ -93,12 +86,12 @@ static inline void __raw_spin_unlock(raw_spinlock_t *lock) | |||
93 | 86 | ||
94 | static inline void __raw_read_lock(raw_rwlock_t *rw) | 87 | static inline void __raw_read_lock(raw_rwlock_t *rw) |
95 | { | 88 | { |
96 | __build_read_lock(rw, "__read_lock_failed"); | 89 | __build_read_lock(rw); |
97 | } | 90 | } |
98 | 91 | ||
99 | static inline void __raw_write_lock(raw_rwlock_t *rw) | 92 | static inline void __raw_write_lock(raw_rwlock_t *rw) |
100 | { | 93 | { |
101 | __build_write_lock(rw, "__write_lock_failed"); | 94 | __build_write_lock(rw); |
102 | } | 95 | } |
103 | 96 | ||
104 | static inline int __raw_read_trylock(raw_rwlock_t *lock) | 97 | static inline int __raw_read_trylock(raw_rwlock_t *lock) |