diff options
| author | Andrew Morton <akpm@osdl.org> | 2004-05-14 05:39:40 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2004-05-14 05:39:40 -0700 |
| commit | ebc7bc428067d8ce745d787a2fbdd593e645bef9 (patch) | |
| tree | 178a4be6d4ab88e479364b9ec343c2a8437ce9de /include | |
| parent | b5fc1438a06e40000dd9510ded6f950fd613c131 (diff) | |
[PATCH] Implement atomic_add_negative() on various architectures
Lots of architectures have atomic_add_return() and no atomic_add_negative().
We can implement the latter in terms of the former.
Diffstat (limited to 'include')
| -rw-r--r-- | include/asm-alpha/atomic.h | 2 | ||||
| -rw-r--r-- | include/asm-cris/atomic.h | 2 | ||||
| -rw-r--r-- | include/asm-h8300/atomic.h | 1 | ||||
| -rw-r--r-- | include/asm-m68knommu/atomic.h | 2 | ||||
| -rw-r--r-- | include/asm-parisc/atomic.h | 2 | ||||
| -rw-r--r-- | include/asm-ppc64/atomic.h | 2 | ||||
| -rw-r--r-- | include/asm-sh/atomic.h | 2 | ||||
| -rw-r--r-- | include/asm-sparc/atomic.h | 2 |
8 files changed, 15 insertions, 0 deletions
diff --git a/include/asm-alpha/atomic.h b/include/asm-alpha/atomic.h index cd253c8c6c7b..568f96f2babd 100644 --- a/include/asm-alpha/atomic.h +++ b/include/asm-alpha/atomic.h @@ -115,6 +115,8 @@ static __inline__ long atomic_add_return(int i, atomic_t * v) return result; } +#define atomic_add_negative(a, v) (atomic_add_return((a), (v)) < 0) + static __inline__ long atomic64_add_return(long i, atomic64_t * v) { long temp, result; diff --git a/include/asm-cris/atomic.h b/include/asm-cris/atomic.h index 19ae993cb561..b3dfea5a71e4 100644 --- a/include/asm-cris/atomic.h +++ b/include/asm-cris/atomic.h @@ -56,6 +56,8 @@ extern __inline__ int atomic_add_return(int i, volatile atomic_t *v) return retval; } +#define atomic_add_negative(a, v) (atomic_add_return((a), (v)) < 0) + extern __inline__ int atomic_sub_return(int i, volatile atomic_t *v) { unsigned long flags; diff --git a/include/asm-h8300/atomic.h b/include/asm-h8300/atomic.h index e9595c099c58..2ad47155f04b 100644 --- a/include/asm-h8300/atomic.h +++ b/include/asm-h8300/atomic.h @@ -25,6 +25,7 @@ static __inline__ int atomic_add_return(int i, atomic_t *v) } #define atomic_add(i, v) atomic_add_return(i, v) +#define atomic_add_negative(a, v) (atomic_add_return((a), (v)) < 0) static __inline__ int atomic_sub_return(int i, atomic_t *v) { diff --git a/include/asm-m68knommu/atomic.h b/include/asm-m68knommu/atomic.h index edaf71e7c96e..9c37df60a808 100644 --- a/include/asm-m68knommu/atomic.h +++ b/include/asm-m68knommu/atomic.h @@ -96,6 +96,8 @@ extern __inline__ int atomic_add_return(int i, atomic_t * v) return temp; } +#define atomic_add_negative(a, v) (atomic_add_return((a), (v)) < 0) + extern __inline__ int atomic_sub_return(int i, atomic_t * v) { unsigned long temp, flags; diff --git a/include/asm-parisc/atomic.h b/include/asm-parisc/atomic.h index 59456797f6d7..e2f4f2083848 100644 --- a/include/asm-parisc/atomic.h +++ b/include/asm-parisc/atomic.h @@ -185,6 +185,8 @@ static __inline__ int atomic_read(const atomic_t *v) #define atomic_inc_return(v) (__atomic_add_return( 1,(v))) #define atomic_dec_return(v) (__atomic_add_return( -1,(v))) +#define atomic_add_negative(a, v) (atomic_add_return((a), (v)) < 0) + #define atomic_dec_and_test(v) (atomic_dec_return(v) == 0) #define ATOMIC_INIT(i) { (i) } diff --git a/include/asm-ppc64/atomic.h b/include/asm-ppc64/atomic.h index 00617e2185af..39b11781a69d 100644 --- a/include/asm-ppc64/atomic.h +++ b/include/asm-ppc64/atomic.h @@ -54,6 +54,8 @@ static __inline__ int atomic_add_return(int a, atomic_t *v) return t; } +#define atomic_add_negative(a, v) (atomic_add_return((a), (v)) < 0) + static __inline__ void atomic_sub(int a, atomic_t *v) { int t; diff --git a/include/asm-sh/atomic.h b/include/asm-sh/atomic.h index e95641a43044..f3aebc725bf2 100644 --- a/include/asm-sh/atomic.h +++ b/include/asm-sh/atomic.h @@ -53,6 +53,8 @@ static __inline__ int atomic_add_return(int i, atomic_t * v) return temp; } +#define atomic_add_negative(a, v) (atomic_add_return((a), (v)) < 0) + static __inline__ int atomic_sub_return(int i, atomic_t * v) { unsigned long temp, flags; diff --git a/include/asm-sparc/atomic.h b/include/asm-sparc/atomic.h index 14b5a8e4da19..fb321781cd40 100644 --- a/include/asm-sparc/atomic.h +++ b/include/asm-sparc/atomic.h @@ -33,6 +33,8 @@ extern void atomic_set(atomic_t *, int); #define atomic_inc_return(v) (__atomic_add_return( 1, (v))) #define atomic_dec_return(v) (__atomic_add_return( -1, (v))) +#define atomic_add_negative(a, v) (atomic_add_return((a), (v)) < 0) + #define atomic_dec_and_test(v) (atomic_dec_return(v) == 0) /* This is the old 24-bit implementation. It's still used internally |
