diff options
author | Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca> | 2008-02-07 03:16:16 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-02-07 11:42:32 -0500 |
commit | 4b78fff6e736cae55dc3fb5570c7ef4037eca9b7 (patch) | |
tree | 1ef5848902fd8222fb2280e48d19575a19aa8809 /include/asm-ia64/intrinsics.h | |
parent | aebb77aef4b50a157bf0185de31d1aede3ca2312 (diff) |
Add cmpxchg_local, cmpxchg64 and cmpxchg64_local to ia64
Add the primitives cmpxchg_local, cmpxchg64 and cmpxchg64_local to ia64. They
use cmpxchg_acq as underlying macro, just like the already existing ia64
cmpxchg().
Changelog:
ia64 cmpxchg_local coding style fix
Quoting Keith Owens:
As a matter of coding style, I prefer
#define cmpxchg_local cmpxchg
#define cmpxchg64_local cmpxchg64
Which makes it absolutely clear that they are the same code. With your
patch, humans have to do a string compare of two defines to see if they
are the same.
Note cmpxchg is *not* a performance win vs interrupt disable / enable on IA64.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Acked-by: Christoph Lameter <clameter@sgi.com>
Cc: "Luck, Tony" <tony.luck@intel.com>
Cc: Keith Owens <kaos@ocs.com.au>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'include/asm-ia64/intrinsics.h')
-rw-r--r-- | include/asm-ia64/intrinsics.h | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/include/asm-ia64/intrinsics.h b/include/asm-ia64/intrinsics.h index 3a95aa432e99..f1135b5b94c3 100644 --- a/include/asm-ia64/intrinsics.h +++ b/include/asm-ia64/intrinsics.h | |||
@@ -153,11 +153,17 @@ extern long ia64_cmpxchg_called_with_bad_pointer (void); | |||
153 | (__typeof__(old)) _r_; \ | 153 | (__typeof__(old)) _r_; \ |
154 | }) | 154 | }) |
155 | 155 | ||
156 | #define cmpxchg_acq(ptr,o,n) ia64_cmpxchg(acq, (ptr), (o), (n), sizeof(*(ptr))) | 156 | #define cmpxchg_acq(ptr, o, n) \ |
157 | #define cmpxchg_rel(ptr,o,n) ia64_cmpxchg(rel, (ptr), (o), (n), sizeof(*(ptr))) | 157 | ia64_cmpxchg(acq, (ptr), (o), (n), sizeof(*(ptr))) |
158 | #define cmpxchg_rel(ptr, o, n) \ | ||
159 | ia64_cmpxchg(rel, (ptr), (o), (n), sizeof(*(ptr))) | ||
158 | 160 | ||
159 | /* for compatibility with other platforms: */ | 161 | /* for compatibility with other platforms: */ |
160 | #define cmpxchg(ptr,o,n) cmpxchg_acq(ptr,o,n) | 162 | #define cmpxchg(ptr, o, n) cmpxchg_acq((ptr), (o), (n)) |
163 | #define cmpxchg64(ptr, o, n) cmpxchg_acq((ptr), (o), (n)) | ||
164 | |||
165 | #define cmpxchg_local cmpxchg | ||
166 | #define cmpxchg64_local cmpxchg64 | ||
161 | 167 | ||
162 | #ifdef CONFIG_IA64_DEBUG_CMPXCHG | 168 | #ifdef CONFIG_IA64_DEBUG_CMPXCHG |
163 | # define CMPXCHG_BUGCHECK_DECL int _cmpxchg_bugcheck_count = 128; | 169 | # define CMPXCHG_BUGCHECK_DECL int _cmpxchg_bugcheck_count = 128; |