| Viewing file:  cmpxchg.h (1.63 KB)      -rw-r--r-- Select action/file-type:
 
  (+) |  (+) |  (+) | Code (+) | Session (+) |  (+) | SDB (+) |  (+) |  (+) |  (+) |  (+) |  (+) | 
 
#ifndef _ALPHA_CMPXCHG_H#define _ALPHA_CMPXCHG_H
 
 /*
 * Atomic exchange routines.
 */
 
 #define __ASM__MB
 #define ____xchg(type, args...)        __xchg ## type ## _local(args)
 #define ____cmpxchg(type, args...)    __cmpxchg ## type ## _local(args)
 #include <asm/xchg.h>
 
 #define xchg_local(ptr, x)                        \
 ({                                    \
 __typeof__(*(ptr)) _x_ = (x);                    \
 (__typeof__(*(ptr))) __xchg_local((ptr), (unsigned long)_x_,    \
 sizeof(*(ptr)));            \
 })
 
 #define cmpxchg_local(ptr, o, n)                    \
 ({                                    \
 __typeof__(*(ptr)) _o_ = (o);                    \
 __typeof__(*(ptr)) _n_ = (n);                    \
 (__typeof__(*(ptr))) __cmpxchg_local((ptr), (unsigned long)_o_,    \
 (unsigned long)_n_,        \
 sizeof(*(ptr)));        \
 })
 
 #define cmpxchg64_local(ptr, o, n)                    \
 ({                                    \
 BUILD_BUG_ON(sizeof(*(ptr)) != 8);                \
 cmpxchg_local((ptr), (o), (n));                    \
 })
 
 #ifdef CONFIG_SMP
 #undef __ASM__MB
 #define __ASM__MB    "\tmb\n"
 #endif
 #undef ____xchg
 #undef ____cmpxchg
 #define ____xchg(type, args...)        __xchg ##type(args)
 #define ____cmpxchg(type, args...)    __cmpxchg ##type(args)
 #include <asm/xchg.h>
 
 #define xchg(ptr, x)                            \
 ({                                    \
 __typeof__(*(ptr)) _x_ = (x);                    \
 (__typeof__(*(ptr))) __xchg((ptr), (unsigned long)_x_,        \
 sizeof(*(ptr)));            \
 })
 
 #define cmpxchg(ptr, o, n)                        \
 ({                                    \
 __typeof__(*(ptr)) _o_ = (o);                    \
 __typeof__(*(ptr)) _n_ = (n);                    \
 (__typeof__(*(ptr))) __cmpxchg((ptr), (unsigned long)_o_,    \
 (unsigned long)_n_,    sizeof(*(ptr)));\
 })
 
 #define cmpxchg64(ptr, o, n)                        \
 ({                                    \
 BUILD_BUG_ON(sizeof(*(ptr)) != 8);                \
 cmpxchg((ptr), (o), (n));                    \
 })
 
 #undef __ASM__MB
 #undef ____cmpxchg
 
 #endif /* _ALPHA_CMPXCHG_H */
 
 |