Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Will Deacon and committed by
Russell King
bf67fd31 e38361d0

+23
+23
arch/arm/include/asm/mcs_spinlock.h
··· 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 */