mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-29 23:53:32 +00:00
ARM: 8098/1: mcs lock: implement wfe-based polling for MCS locking
This patch introduces a wfe-based polling loop for spinning on contended MCS locks and waking up corresponding waiters when the lock is released. Signed-off-by: Will Deacon <will.deacon@arm.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
e38361d032
commit
bf67fd3142
1 changed files with 23 additions and 0 deletions
23
arch/arm/include/asm/mcs_spinlock.h
Normal file
23
arch/arm/include/asm/mcs_spinlock.h
Normal file
|
@ -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 */
|
Loading…
Reference in a new issue