diff --git a/include/import/atomic-ops.h b/include/import/atomic-ops.h index 6fe4c78f4..1d9c98ba5 100644 --- a/include/import/atomic-ops.h +++ b/include/import/atomic-ops.h @@ -524,10 +524,21 @@ #else /* generic implementations */ +#if defined(__aarch64__) + +/* This was shown to improve fairness on modern ARMv8 such as Neoverse N1 */ +#define pl_cpu_relax() do { \ + asm volatile("isb" ::: "memory"); \ + } while (0) + +#else + #define pl_cpu_relax() do { \ asm volatile(""); \ } while (0) +#endif + /* full memory barrier */ #define pl_mb() do { \ __sync_synchronize(); \