| 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/