xref: /kernel/linux/linux-6.6/arch/arm/include/asm/mcs_spinlock.h
  • Home
  • History
  • Annotate Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
  • only in /kernel/linux/linux-6.6/arch/arm/include/asm/
162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci#ifndef __ASM_MCS_LOCK_H
362306a36Sopenharmony_ci#define __ASM_MCS_LOCK_H
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci#ifdef CONFIG_SMP
662306a36Sopenharmony_ci#include <asm/spinlock.h>
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci/* MCS spin-locking. */
962306a36Sopenharmony_ci#define arch_mcs_spin_lock_contended(lock)				\
1062306a36Sopenharmony_cido {									\
1162306a36Sopenharmony_ci	/* Ensure prior stores are observed before we enter wfe. */	\
1262306a36Sopenharmony_ci	smp_mb();							\
1362306a36Sopenharmony_ci	while (!(smp_load_acquire(lock)))				\
1462306a36Sopenharmony_ci		wfe();							\
1562306a36Sopenharmony_ci} while (0)								\
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci#define arch_mcs_spin_unlock_contended(lock)				\
1862306a36Sopenharmony_cido {									\
1962306a36Sopenharmony_ci	smp_store_release(lock, 1);					\
2062306a36Sopenharmony_ci	dsb_sev();							\
2162306a36Sopenharmony_ci} while (0)
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ci#endif	/* CONFIG_SMP */
2462306a36Sopenharmony_ci#endif	/* __ASM_MCS_LOCK_H */
25

Indexes created Thu Nov 07 10:32:03 CST 2024