aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2024-11-19 15:22:50 +0000
committerJohn Baldwin <jhb@FreeBSD.org>2024-11-19 15:22:50 +0000
commit987c5a1944183cf82884fdb96b0432bd810aa8b9 (patch)
tree0f110f58373514d9f8e1eeb8d368dd5d141df51c
parenta474e53d03ca8c78696fc222520de7d6876cc530 (diff)
arm: Implement atomic_testandset_acq_long as a simple wrapper
Use a memory barrier after calling the existing atomic_testandset_long rather than using the fcmpset-based fallback version from <sys/_atomic_subword.h>. Reviewed by: kib Sponsored by: AFRL, DARPA Differential Revision: https://reviews.freebsd.org/D47628
-rw-r--r--sys/arm/include/atomic.h12
1 files changed, 11 insertions, 1 deletions
diff --git a/sys/arm/include/atomic.h b/sys/arm/include/atomic.h
index cd6f5cf90d8a..c9232a4f97ef 100644
--- a/sys/arm/include/atomic.h
+++ b/sys/arm/include/atomic.h
@@ -955,6 +955,17 @@ atomic_testandset_long(volatile u_long *p, u_int v)
#define atomic_testandset_long atomic_testandset_long
static __inline int
+atomic_testandset_acq_long(volatile u_long *p, u_int v)
+{
+ int ret;
+
+ ret = atomic_testandset_32((volatile uint32_t *)p, v);
+ dmb();
+ return (ret);
+}
+#define atomic_testandset_acq_long atomic_testandset_acq_long
+
+static __inline int
atomic_testandset_64(volatile uint64_t *p, u_int v)
{
volatile uint32_t *p32;
@@ -1098,7 +1109,6 @@ atomic_thread_fence_seq_cst(void)
* For:
* - atomic_load_acq_8
* - atomic_load_acq_16
- * - atomic_testandset_acq_long
*/
#include <sys/_atomic_subword.h>