]> git.openfabrics.org - ~ardavis/dapl.git/commitdiff
dapl: aarch64 support for linux
authorMark Salter <msalter@redhat.com>
Wed, 13 May 2015 23:40:58 +0000 (16:40 -0700)
committerArlin Davis <arlin.r.davis@intel.com>
Wed, 13 May 2015 23:40:58 +0000 (16:40 -0700)
Add atomic ops to fix builds for aarch64 Linux.

Signed-off-by: Mark Salter <msalter@redhat.com>
Acked-by: Arlin Davis <arlin.r.davis@intel.com>
dapl/udapl/linux/dapl_osd.h

index 10f71b0fda34ec58effafcf4f41433a91726010a..2b255d0dc5c4345e449da8ded7042659f2bda41c 100644 (file)
@@ -50,7 +50,8 @@
 #endif /* __linux__ */
 
 #if !defined (__i386__) && !defined (__ia64__) && !defined(__x86_64__) && \
-    !defined(__PPC__) && !defined(__PPC64__) && !defined(__s390x__)
+    !defined(__PPC__) && !defined(__PPC64__) && !defined(__s390x__) && \
+    !defined(__aarch64__)
 #error UNDEFINED ARCH
 #endif
 
@@ -214,6 +215,8 @@ dapl_os_atomic_inc (
        : "=&r" (tmp), "+m" (v)
        : "b" (v)
        : "cc");
+#elif defined(__aarch64__)
+    __atomic_fetch_add(v, 1, __ATOMIC_ACQ_REL);
 #else  /* !__ia64__ */
     __asm__ __volatile__ (
        "lock;" "incl %0"
@@ -258,6 +261,8 @@ dapl_os_atomic_dec (
        : "=&r" (tmp), "+m" (v)
        : "b" (v)
        : "cc");
+#elif defined(__aarch64__)
+    __atomic_fetch_add(v, -1, __ATOMIC_ACQ_REL);
 #else  /* !__ia64__ */
     __asm__ __volatile__ (
        "lock;" "decl %0"
@@ -322,6 +327,10 @@ dapl_os_atomic_assign (
         : "=&r" (current_value), "=m" (*v)
         : "r" (v), "r" (match_value), "r" (new_value), "m" (*v)
         : "cc", "memory");
+#elif defined(__aarch64__)
+    current_value = match_value;
+    __atomic_compare_exchange_n(v, &current_value, new_value, 1,
+                               __ATOMIC_ACQ_REL, __ATOMIC_RELAXED);
 #else
     __asm__ __volatile__ (
         "lock; cmpxchgl %1, %2"