From 614fe8a9442cb96a8c1008fc840b7dfc332deaed Mon Sep 17 00:00:00 2001 From: 25077667 Date: Sat, 2 Sep 2023 12:24:37 +0800 Subject: [PATCH] Add memory barrier for aarch64 --- seqlock/seqlock.c | 22 ++++++++++++++-------- seqlock/tests | Bin 0 -> 16184 bytes 2 files changed, 14 insertions(+), 8 deletions(-) create mode 100755 seqlock/tests diff --git a/seqlock/seqlock.c b/seqlock/seqlock.c index 7d4e292..805ade3 100644 --- a/seqlock/seqlock.c +++ b/seqlock/seqlock.c @@ -10,37 +10,43 @@ #define SEQLOCK_WRITER 1U -#if defined(__i386__) || defined(__x86_64__) || defined(__aarch64__) +#if defined(__i386__) || defined(__x86_64__) #define spin_wait() atomic_thread_fence(memory_order_seq_cst) +#elif defined(__aarch64__) +#define spin_wait() __asm__ __volatile__("isb\n") #else #define spin_wait() ((void) 0) #endif +#if defined(__aarch64__) #define SEVL() sevl() static inline void sevl(void) { - atomic_thread_fence(memory_order_seq_cst); + __asm__ volatile("sevl" : : :); } #define WFE() wfe() static inline int wfe(void) { - atomic_thread_fence(memory_order_seq_cst); + __asm__ volatile("wfe" : : : "memory"); return 1; } #define LDX(a, b) ldx((a), (b)) -static inline uint32_t ldx(const _Atomic uint32_t *var, int mm) +static inline uint32_t ldx(const uint8_t *var, int mm) { uint32_t old; - if (mm == memory_order_acquire) - old = atomic_load_explicit(var, memory_order_acquire); + __asm volatile("ldaxrb %w0, [%1]" : "=&r"(old) : "r"(var) : "memory"); else if (mm == memory_order_relaxed) - old = atomic_load_explicit(var, memory_order_relaxed); + __asm volatile("ldxrb %w0, [%1]" : "=&r"(old) : "r"(var) : "memory"); else abort(); - return old; } +#else /* generic */ +#define SEVL() (void) 0 +#define WFE() 1 +#define LDX(a, b) atomic_load_explicit((a), (b)) +#endif #define UNLIKELY(x) __builtin_expect(!!(x), 0) diff --git a/seqlock/tests b/seqlock/tests new file mode 100755 index 0000000000000000000000000000000000000000..26fce6f99a64e68bf11e90cada5f63f03a32cc58 GIT binary patch literal 16184 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 ayv;cKWm$SooJ#*e`eQ=5z@}hpivIv;+Og6A literal 0 HcmV?d00001