Will Deacon | bf67fd3 | 2014-07-09 19:31:28 +0100 | [diff] [blame] | 1 | #ifndef __ASM_MCS_LOCK_H |
| 2 | #define __ASM_MCS_LOCK_H |
| 3 | |
| 4 | #ifdef CONFIG_SMP |
| 5 | #include <asm/spinlock.h> |
| 6 | |
| 7 | /* MCS spin-locking. */ |
| 8 | #define arch_mcs_spin_lock_contended(lock) \ |
| 9 | do { \ |
| 10 | /* Ensure prior stores are observed before we enter wfe. */ \ |
| 11 | smp_mb(); \ |
| 12 | while (!(smp_load_acquire(lock))) \ |
| 13 | wfe(); \ |
| 14 | } while (0) \ |
| 15 | |
| 16 | #define arch_mcs_spin_unlock_contended(lock) \ |
| 17 | do { \ |
| 18 | smp_store_release(lock, 1); \ |
| 19 | dsb_sev(); \ |
| 20 | } while (0) |
| 21 | |
| 22 | #endif /* CONFIG_SMP */ |
| 23 | #endif /* __ASM_MCS_LOCK_H */ |