aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-x86_64/spinlock.h
diff options
context:
space:
mode:
authorAndi Kleen <ak@suse.de>2006-09-26 10:52:28 +0200
committerAndi Kleen <andi@basil.nowhere.org>2006-09-26 10:52:28 +0200
commit9a0b26e6bc4ae1979d9bcc6194e57a71b2b5cac6 (patch)
tree01601a502007b85d4fc88f79de7a93c257ef9d97 /include/asm-x86_64/spinlock.h
parentb4062b16094038334d9bbadac0397a3fc9e981b0 (diff)
downloadkernel_samsung_smdk4412-9a0b26e6bc4ae1979d9bcc6194e57a71b2b5cac6.zip
kernel_samsung_smdk4412-9a0b26e6bc4ae1979d9bcc6194e57a71b2b5cac6.tar.gz
kernel_samsung_smdk4412-9a0b26e6bc4ae1979d9bcc6194e57a71b2b5cac6.tar.bz2
[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.h11
1 files changed, 2 insertions, 9 deletions
diff --git a/include/asm-x86_64/spinlock.h b/include/asm-x86_64/spinlock.h
index 248a79f..a8e3d89 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)
*
* On x86, we implement read-write locks as a 32-bit counter
* with the high bit (sign) being the "contended" bit.
- *
- * The inline assembly is non-obvious. Think about it.
- *
- * Changed to use the same technique as rw semaphores. See
- * semaphore.h for details. -ben
- *
- * the helpers are in arch/i386/kernel/semaphore.c
*/
#define __raw_read_can_lock(x) ((int)(x)->lock > 0)
@@ -93,12 +86,12 @@ static inline void __raw_spin_unlock(raw_spinlock_t *lock)
static inline void __raw_read_lock(raw_rwlock_t *rw)
{
- __build_read_lock(rw, "__read_lock_failed");
+ __build_read_lock(rw);
}
static inline void __raw_write_lock(raw_rwlock_t *rw)
{
- __build_write_lock(rw, "__write_lock_failed");
+ __build_write_lock(rw);
}
static inline int __raw_read_trylock(raw_rwlock_t *lock)