|
@@ -23,13 +23,15 @@ struct mcs_spinlock {
|
|
|
|
|
|
#ifndef arch_mcs_spin_lock_contended
|
|
#ifndef arch_mcs_spin_lock_contended
|
|
/*
|
|
/*
|
|
- * Using smp_load_acquire() provides a memory barrier that ensures
|
|
|
|
- * subsequent operations happen after the lock is acquired.
|
|
|
|
|
|
+ * Using smp_cond_load_acquire() provides the acquire semantics
|
|
|
|
+ * required so that subsequent operations happen after the
|
|
|
|
+ * lock is acquired. Additionally, some architectures such as
|
|
|
|
+ * ARM64 would like to do spin-waiting instead of purely
|
|
|
|
+ * spinning, and smp_cond_load_acquire() provides that behavior.
|
|
*/
|
|
*/
|
|
#define arch_mcs_spin_lock_contended(l) \
|
|
#define arch_mcs_spin_lock_contended(l) \
|
|
do { \
|
|
do { \
|
|
- while (!(smp_load_acquire(l))) \
|
|
|
|
- cpu_relax(); \
|
|
|
|
|
|
+ smp_cond_load_acquire(l, VAL); \
|
|
} while (0)
|
|
} while (0)
|
|
#endif
|
|
#endif
|
|
|
|
|