]> git.hungrycats.org Git - linux/commitdiff
[PATCH] atomic_inc_return() for arm26
authorKaiGai Kohei <kaigai@ak.jp.nec.com>
Wed, 20 Oct 2004 01:13:58 +0000 (18:13 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Wed, 20 Oct 2004 01:13:58 +0000 (18:13 -0700)
This patch implements atomic_inc_return() and so on for ARM26.  Because
Hugh says that SMP is not supported in arm26, it is implemented by normal
operations between local_irq_save() and local_irq_restore() like another
atomic operations.

Signed-off-by: KaiGai, Kohei <kaigai@ak.jp.nec.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
include/asm-arm26/atomic.h

index 5697fc898593191b03b49de1278e015bc7f34873..56fa1a3038fab26e090f033aad163fe65026ebe2 100644 (file)
@@ -105,6 +105,27 @@ static inline void atomic_clear_mask(unsigned long mask, unsigned long *addr)
        local_irq_restore(flags);
 }
 
+static inline int atomic_add_return(int i, volatile atomic_t *v)
+{
+       unsigned long flags;
+       int val;
+
+       local_irq_save(flags);
+       val = v->counter + i;
+       v->counter = val;
+       local_irq_restore(flags);
+
+       return val;
+}
+
+static inline int atomic_sub_return(int i, volatile atomic_t *v)
+{
+       return atomic_add_return(-i, v);
+}
+
+#define atomic_inc_return(v)  (atomic_add_return(1,v))
+#define atomic_dec_return(v)  (atomic_sub_return(1,v))
+
 /* Atomic operations are already serializing on ARM */
 #define smp_mb__before_atomic_dec()    barrier()
 #define smp_mb__after_atomic_dec()     barrier()