Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=5e86c11d3eb4662000f3ced7344352b2ca319d03
Commit:     5e86c11d3eb4662000f3ced7344352b2ca319d03
Parent:     176393d4232a89aaf8745b0726f4d212a20103f1
Author:     Mathieu Desnoyers <[EMAIL PROTECTED]>
AuthorDate: Thu Feb 7 00:16:12 2008 -0800
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Thu Feb 7 08:42:31 2008 -0800

    Add cmpxchg_local to avr32
    
    Use the new generic cmpxchg_local (disables interrupt) for 8, 16 and 64 bits
    cmpxchg_local. Use the __cmpxchg_u32 primitive for 32 bits cmpxchg_local.
    
    Note that cmpxchg only uses the __cmpxchg_u32 or __cmpxchg_u64 and will 
cause
    a linker error if called with 8 or 16 bits argument.
    
    Signed-off-by: Mathieu Desnoyers <[EMAIL PROTECTED]>
    Acked-by: Haavard Skinnemoen <[EMAIL PROTECTED]>
    Cc: Haavard Skinnemoen <[EMAIL PROTECTED]>
    Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
---
 include/asm-avr32/system.h |   23 +++++++++++++++++++++++
 1 files changed, 23 insertions(+), 0 deletions(-)

diff --git a/include/asm-avr32/system.h b/include/asm-avr32/system.h
index c600cc1..9702c22 100644
--- a/include/asm-avr32/system.h
+++ b/include/asm-avr32/system.h
@@ -145,6 +145,29 @@ static inline unsigned long __cmpxchg(volatile void *ptr, 
unsigned long old,
                                   (unsigned long)(new),        \
                                   sizeof(*(ptr))))
 
+#include <asm-generic/cmpxchg-local.h>
+
+static inline unsigned long __cmpxchg_local(volatile void *ptr,
+                                     unsigned long old,
+                                     unsigned long new, int size)
+{
+       switch (size) {
+       case 4:
+               return __cmpxchg_u32(ptr, old, new);
+       default:
+               return __cmpxchg_local_generic(ptr, old, new, size);
+       }
+
+       return old;
+}
+
+#define cmpxchg_local(ptr, old, new)                                   \
+       ((typeof(*(ptr)))__cmpxchg_local((ptr), (unsigned long)(old),   \
+                                  (unsigned long)(new),                \
+                                  sizeof(*(ptr))))
+
+#define cmpxchg64_local(ptr, o, n) __cmpxchg64_local_generic((ptr), (o), (n))
+
 struct pt_regs;
 void NORET_TYPE die(const char *str, struct pt_regs *regs, long err);
 void _exception(long signr, struct pt_regs *regs, int code,
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to