[LTP] [PATCH] arm64: add tst_atomic_add_return
Yury Norov
ynorov@caviumnetworks.com
Wed Jan 25 22:13:42 CET 2017
The patch fixes build of LTP, at least with gcc 5.3.
The implementation is taken from kernel v4.9.
Signed-off-by: Yury Norov <ynorov@caviumnetworks.com>
---
include/tst_atomic.h | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git a/include/tst_atomic.h b/include/tst_atomic.h
index 799d735..35a3b34 100644
--- a/include/tst_atomic.h
+++ b/include/tst_atomic.h
@@ -131,6 +131,27 @@ static inline int tst_atomic_add_return(int i, int *v)
return val;
}
+
+#elif defined (__aarch64__)
+static inline int tst_atomic_add_return(int i, int *v)
+{
+ unsigned long tmp;
+ int result;
+
+ __asm__ __volatile__(
+" prfm pstl1strm, %2 \n"
+"1: ldxr %w0, %2 \n"
+" add %w0, %w0, %w3 \n"
+" stlxr %w1, %w0, %2 \n"
+" cbnz %w1, 1b \n"
+" dmb ish \n"
+ : "=&r" (result), "=&r" (tmp), "+Q" (*v)
+ : "Ir" (i)
+ : "memory");
+
+ return result;
+}
+
#else /* HAVE_SYNC_ADD_AND_FETCH == 1 */
# error Your compiler does not provide __sync_add_and_fetch and LTP\
implementation is missing for your architecture.
--
2.7.4
More information about the ltp
mailing list