diff --git a/ext/linux/include/lk_atomics.h b/ext/linux/include/lk_atomics.h index 86e9b06..bf6a793 100644 --- a/ext/linux/include/lk_atomics.h +++ b/ext/linux/include/lk_atomics.h @@ -251,7 +251,9 @@ static inline uint16_t xchg_release16(uint16_t *ptr, uint16_t val) { static inline void cpu_relax (void) { #if defined(__x86_64__) asm volatile ("pause" : : : "memory" ); -#elif defined (__arch64__) +#elif defined (__aarch64__) && defined(RELAX_IS_ISB) + asm volatile ("isb" : : : "memory" ); +#elif defined (__aarch64__) asm volatile ("yield" : : : "memory" ); #endif } diff --git a/ext/mysql/include/ut_atomics.h b/ext/mysql/include/ut_atomics.h index caacb5d..339551e 100644 --- a/ext/mysql/include/ut_atomics.h +++ b/ext/mysql/include/ut_atomics.h @@ -21,10 +21,10 @@ this program; if not, write to the Free Software Foundation, Inc., #if defined(__x86_64__) #define UT_RELAX_CPU() asm volatile ("rep; nop") -#elif defined(__AARCH64__) +#elif defined(__aarch64__) // Theoretically we could emit a yield here but MySQL doesn't do it // and most ARM cores are likely to NOP it anyway -#define UT_RELAX_CPU() asm volatile ("":::"memory") +#define UT_RELAX_CPU() asm volatile ("isb":::"memory") #else #define UT_RELAX_CPU() asm volatile ("":::"memory") #endif