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:
Родитель
e38361d032
Коммит
bf67fd3142
|
@ -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 */
|
Загрузка…
Ссылка в новой задаче