LWN.net Logo

atomic_inc_return() for arm26[1/5] (Re: atomic_inc_return)

From:  kaigai@ak.jp.nec.com (Kaigai Kohei)
To:  akpm@osdl.org, hugh@veritas.com, spyro@f2s.com
Subject:  [PATCH] atomic_inc_return() for arm26[1/5] (Re: atomic_inc_return)
Date:  Fri, 10 Sep 2004 12:30:15 +0900 (JST)
Cc:  wli@holomorphy.com, takata.hirokazu@renesas.com, kaigai@ak.jp.nec.com, linux-kernel@vger.kernel.org


[4/5] atomic_inc_return-linux-2.6.9-rc1.arm26.patch
  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.
  This patch has not been tested, since we don't have ARM26 machine.
  I want to let this reviewed by ARM26 specialists.

Signed-off-by: KaiGai, Kohei <kaigai@ak.jp.nec.com>
--------
Kai Gai <kaigai@ak.jp.nec.com>


diff -rNU4 linux-2.6.9-rc1/include/asm-arm26/atomic.h linux-2.6.9-rc1.atomic_inc_return/include/asm-arm26/atomic.h
--- linux-2.6.9-rc1/include/asm-arm26/atomic.h	2004-08-24 16:02:32.000000000 +0900
+++ linux-2.6.9-rc1.atomic_inc_return/include/asm-arm26/atomic.h	2004-09-10 10:20:29.000000000 +0900
@@ -104,8 +104,29 @@
 	*addr &= ~mask;
 	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()
 #define smp_mb__before_atomic_inc()	barrier()
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Copyright © 2004, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds