diff options
Diffstat (limited to 'kernel/arch/arm/include/asm/mcs_spinlock.h')
-rw-r--r-- | kernel/arch/arm/include/asm/mcs_spinlock.h | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/kernel/arch/arm/include/asm/mcs_spinlock.h b/kernel/arch/arm/include/asm/mcs_spinlock.h new file mode 100644 index 000000000..f652ad658 --- /dev/null +++ b/kernel/arch/arm/include/asm/mcs_spinlock.h @@ -0,0 +1,23 @@ +#ifndef __ASM_MCS_LOCK_H +#define __ASM_MCS_LOCK_H + +#ifdef CONFIG_SMP +#include <asm/spinlock.h> + +/* MCS spin-locking. */ +#define arch_mcs_spin_lock_contended(lock) \ +do { \ + /* Ensure prior stores are observed before we enter wfe. */ \ + smp_mb(); \ + while (!(smp_load_acquire(lock))) \ + wfe(); \ +} while (0) \ + +#define arch_mcs_spin_unlock_contended(lock) \ +do { \ + smp_store_release(lock, 1); \ + dsb_sev(); \ +} while (0) + +#endif /* CONFIG_SMP */ +#endif /* __ASM_MCS_LOCK_H */ |