[CRIU] [PATCH] arm: fix compilation on ARMv6
Andrew Vagin
avagin at openvz.org
Mon Dec 22 03:16:39 PST 2014
Cc: Ruslan Kuprieiev <kupruser at gmail.com>
Signed-off-by: Andrew Vagin <avagin at openvz.org>
---
arch/arm/include/asm/atomic.h | 61 +++++++++++++++++++++++++----------------
1 file changed, 37 insertions(+), 24 deletions(-)
diff --git a/arch/arm/include/asm/atomic.h b/arch/arm/include/asm/atomic.h
index 04faf58..cd0df37 100644
--- a/arch/arm/include/asm/atomic.h
+++ b/arch/arm/include/asm/atomic.h
@@ -14,10 +14,47 @@ typedef struct {
#define smp_mb() __asm__ __volatile__ ("dmb" : : : "memory")
+static inline int atomic_cmpxchg(atomic_t *ptr, int old, int new)
+{
+ int oldval;
+ unsigned long res;
+
+ smp_mb();
+ prefetchw(&ptr->counter);
+
+ do {
+ __asm__ __volatile__("@ atomic_cmpxchg\n"
+ "ldrex %1, [%3]\n"
+ "mov %0, #0\n"
+ "teq %1, %4\n"
+ "strexeq %0, %5, [%3]\n"
+ : "=&r" (res), "=&r" (oldval), "+Qo" (ptr->counter)
+ : "r" (&ptr->counter), "Ir" (old), "r" (new)
+ : "cc");
+ } while (res);
+
+ smp_mb();
+
+ return oldval;
+}
+
#elif defined(CONFIG_ARMV6)
+/* SMP isn't supported for ARMv6 */
+
#define smp_mb() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5" : : "r" (0) : "memory")
+static inline int atomic_cmpxchg(atomic_t *v, int old, int new)
+{
+ int ret;
+
+ ret = v->counter;
+ if (ret == old)
+ v->counter = new;
+
+ return ret;
+}
+
#else
#error ARM architecture version (CONFIG_ARMV*) not set or unsupported.
@@ -91,28 +128,4 @@ static inline int atomic_dec(atomic_t *v) { return atomic_sub_return(1, v) + 1;
#define atomic_inc_return(v) (atomic_add_return(1, v))
-static inline int atomic_cmpxchg(atomic_t *ptr, int old, int new)
-{
- int oldval;
- unsigned long res;
-
- smp_mb();
- prefetchw(&ptr->counter);
-
- do {
- __asm__ __volatile__("@ atomic_cmpxchg\n"
- "ldrex %1, [%3]\n"
- "mov %0, #0\n"
- "teq %1, %4\n"
- "strexeq %0, %5, [%3]\n"
- : "=&r" (res), "=&r" (oldval), "+Qo" (ptr->counter)
- : "r" (&ptr->counter), "Ir" (old), "r" (new)
- : "cc");
- } while (res);
-
- smp_mb();
-
- return oldval;
-}
-
#endif /* __CR_ATOMIC_H__ */
--
1.7.10.4
More information about the CRIU
mailing list