summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorAndrew Morton <akpm@osdl.org>2004-05-14 05:39:40 -0700
committerLinus Torvalds <torvalds@ppc970.osdl.org>2004-05-14 05:39:40 -0700
commitebc7bc428067d8ce745d787a2fbdd593e645bef9 (patch)
tree178a4be6d4ab88e479364b9ec343c2a8437ce9de /include
parentb5fc1438a06e40000dd9510ded6f950fd613c131 (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.h2
-rw-r--r--include/asm-cris/atomic.h2
-rw-r--r--include/asm-h8300/atomic.h1
-rw-r--r--include/asm-m68knommu/atomic.h2
-rw-r--r--include/asm-parisc/atomic.h2
-rw-r--r--include/asm-ppc64/atomic.h2
-rw-r--r--include/asm-sh/atomic.h2
-rw-r--r--include/asm-sparc/atomic.h2
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