# SPDX-License-Identifier: GPL-2.0-only## The ARCH_INLINE foo is necessary because select ignores "depends on"#config ARCH_INLINE_SPIN_TRYLOCK boolconfig ARCH_INLINE_SPIN_TRYLOCK_BH boolconfig ARCH_INLINE_SPIN_LOCK boolconfig ARCH_INLINE_SPIN_LOCK_BH boolconfig ARCH_INLINE_SPIN_LOCK_IRQ boolconfig ARCH_INLINE_SPIN_LOCK_IRQSAVE boolconfig ARCH_INLINE_SPIN_UNLOCK boolconfig ARCH_INLINE_SPIN_UNLOCK_BH boolconfig ARCH_INLINE_SPIN_UNLOCK_IRQ boolconfig ARCH_INLINE_SPIN_UNLOCK_IRQRESTORE boolconfig ARCH_INLINE_READ_TRYLOCK boolconfig ARCH_INLINE_READ_LOCK boolconfig ARCH_INLINE_READ_LOCK_BH boolconfig ARCH_INLINE_READ_LOCK_IRQ boolconfig ARCH_INLINE_READ_LOCK_IRQSAVE boolconfig ARCH_INLINE_READ_UNLOCK boolconfig ARCH_INLINE_READ_UNLOCK_BH boolconfig ARCH_INLINE_READ_UNLOCK_IRQ boolconfig ARCH_INLINE_READ_UNLOCK_IRQRESTORE boolconfig ARCH_INLINE_WRITE_TRYLOCK boolconfig ARCH_INLINE_WRITE_LOCK boolconfig ARCH_INLINE_WRITE_LOCK_BH boolconfig ARCH_INLINE_WRITE_LOCK_IRQ boolconfig ARCH_INLINE_WRITE_LOCK_IRQSAVE boolconfig ARCH_INLINE_WRITE_UNLOCK boolconfig ARCH_INLINE_WRITE_UNLOCK_BH boolconfig ARCH_INLINE_WRITE_UNLOCK_IRQ boolconfig ARCH_INLINE_WRITE_UNLOCK_IRQRESTORE boolconfig UNINLINE_SPIN_UNLOCK bool## lock_* functions are inlined when:# - DEBUG_SPINLOCK=n and GENERIC_LOCKBREAK=n and ARCH_INLINE_*LOCK=y## trylock_* functions are inlined when:# - DEBUG_SPINLOCK=n and ARCH_INLINE_*LOCK=y## unlock and unlock_irq functions are inlined when:# - DEBUG_SPINLOCK=n and ARCH_INLINE_*LOCK=y# or# - DEBUG_SPINLOCK=n and PREEMPTION=n## unlock_bh and unlock_irqrestore functions are inlined when:# - DEBUG_SPINLOCK=n and ARCH_INLINE_*LOCK=y#if !DEBUG_SPINLOCKconfig INLINE_SPIN_TRYLOCK def_bool y depends on ARCH_INLINE_SPIN_TRYLOCKconfig INLINE_SPIN_TRYLOCK_BH def_bool y depends on ARCH_INLINE_SPIN_TRYLOCK_BHconfig INLINE_SPIN_LOCK def_bool y depends on !GENERIC_LOCKBREAK && ARCH_INLINE_SPIN_LOCKconfig INLINE_SPIN_LOCK_BH def_bool y depends on !GENERIC_LOCKBREAK && ARCH_INLINE_SPIN_LOCK_BHconfig INLINE_SPIN_LOCK_IRQ def_bool y depends on !GENERIC_LOCKBREAK && ARCH_INLINE_SPIN_LOCK_IRQconfig INLINE_SPIN_LOCK_IRQSAVE def_bool y depends on !GENERIC_LOCKBREAK && ARCH_INLINE_SPIN_LOCK_IRQSAVEconfig INLINE_SPIN_UNLOCK_BH def_bool y depends on ARCH_INLINE_SPIN_UNLOCK_BHconfig INLINE_SPIN_UNLOCK_IRQ def_bool y depends on !PREEMPTION || ARCH_INLINE_SPIN_UNLOCK_IRQconfig INLINE_SPIN_UNLOCK_IRQRESTORE def_bool y depends on ARCH_INLINE_SPIN_UNLOCK_IRQRESTOREconfig INLINE_READ_TRYLOCK def_bool y depends on ARCH_INLINE_READ_TRYLOCKconfig INLINE_READ_LOCK def_bool y depends on !GENERIC_LOCKBREAK && ARCH_INLINE_READ_LOCKconfig INLINE_READ_LOCK_BH def_bool y depends on !GENERIC_LOCKBREAK && ARCH_INLINE_READ_LOCK_BHconfig INLINE_READ_LOCK_IRQ def_bool y depends on !GENERIC_LOCKBREAK && ARCH_INLINE_READ_LOCK_IRQconfig INLINE_READ_LOCK_IRQSAVE def_bool y depends on !GENERIC_LOCKBREAK && ARCH_INLINE_READ_LOCK_IRQSAVEconfig INLINE_READ_UNLOCK def_bool y depends on !PREEMPTION || ARCH_INLINE_READ_UNLOCKconfig INLINE_READ_UNLOCK_BH def_bool y depends on ARCH_INLINE_READ_UNLOCK_BHconfig INLINE_READ_UNLOCK_IRQ def_bool y depends on !PREEMPTION || ARCH_INLINE_READ_UNLOCK_IRQconfig INLINE_READ_UNLOCK_IRQRESTORE def_bool y depends on ARCH_INLINE_READ_UNLOCK_IRQRESTOREconfig INLINE_WRITE_TRYLOCK def_bool y depends on ARCH_INLINE_WRITE_TRYLOCKconfig INLINE_WRITE_LOCK def_bool y depends on !GENERIC_LOCKBREAK && ARCH_INLINE_WRITE_LOCKconfig INLINE_WRITE_LOCK_BH def_bool y depends on !GENERIC_LOCKBREAK && ARCH_INLINE_WRITE_LOCK_BHconfig INLINE_WRITE_LOCK_IRQ def_bool y depends on !GENERIC_LOCKBREAK && ARCH_INLINE_WRITE_LOCK_IRQconfig INLINE_WRITE_LOCK_IRQSAVE def_bool y depends on !GENERIC_LOCKBREAK && ARCH_INLINE_WRITE_LOCK_IRQSAVEconfig INLINE_WRITE_UNLOCK def_bool y depends on !PREEMPTION || ARCH_INLINE_WRITE_UNLOCKconfig INLINE_WRITE_UNLOCK_BH def_bool y depends on ARCH_INLINE_WRITE_UNLOCK_BHconfig INLINE_WRITE_UNLOCK_IRQ def_bool y depends on !PREEMPTION || ARCH_INLINE_WRITE_UNLOCK_IRQconfig INLINE_WRITE_UNLOCK_IRQRESTORE def_bool y depends on ARCH_INLINE_WRITE_UNLOCK_IRQRESTOREendifconfig ARCH_SUPPORTS_ATOMIC_RMW boolconfig MUTEX_SPIN_ON_OWNER def_bool y depends on SMP && ARCH_SUPPORTS_ATOMIC_RMWconfig RWSEM_SPIN_ON_OWNER def_bool y depends on SMP && ARCH_SUPPORTS_ATOMIC_RMWconfig LOCK_SPIN_ON_OWNER def_bool y depends on MUTEX_SPIN_ON_OWNER || RWSEM_SPIN_ON_OWNERconfig ARCH_USE_QUEUED_SPINLOCKS boolconfig QUEUED_SPINLOCKS def_bool y if ARCH_USE_QUEUED_SPINLOCKS depends on SMPconfig QUEUED_SPINLOCKS_TRACE_CONTENDED_RELEASE bool "Trace contended_release on queued spinlocks" depends on QUEUED_SPINLOCKS && TRACEPOINTS help Fire the lock:contended_release tracepoint when a contended queued spinlock is released, so it is possible to attribute a contended spinlock to its holder. Architectures that can patch the unlock site do this at no cost and do not need this option. Everywhere else the check is compiled into queued_spin_unlock() and a small cost is paid on every unlock even when the tracepoint is disabled: a static-branch NOP and possibly a few more instructions to manage a stack frame. Sleeping locks fire lock:contended_release regardless of this option. If unsure, say N.config BPF_ARCH_SPINLOCK boolconfig ARCH_USE_QUEUED_RWLOCKS boolconfig QUEUED_RWLOCKS def_bool y if ARCH_USE_QUEUED_RWLOCKS depends on SMP && !PREEMPT_RTconfig ARCH_HAS_MMIOWB boolconfig MMIOWB def_bool y if ARCH_HAS_MMIOWB depends on SMP
# SPDX-License-Identifier: GPL-2.0-only
#
# The ARCH_INLINE foo is necessary because select ignores "depends on"
#
config ARCH_INLINE_SPIN_TRYLOCK
bool
config ARCH_INLINE_SPIN_TRYLOCK_BH
bool
config ARCH_INLINE_SPIN_LOCK
bool
config ARCH_INLINE_SPIN_LOCK_BH
bool
config ARCH_INLINE_SPIN_LOCK_IRQ
bool
config ARCH_INLINE_SPIN_LOCK_IRQSAVE
bool
config ARCH_INLINE_SPIN_UNLOCK
bool
config ARCH_INLINE_SPIN_UNLOCK_BH
bool
config ARCH_INLINE_SPIN_UNLOCK_IRQ
bool
config ARCH_INLINE_SPIN_UNLOCK_IRQRESTORE
bool
config ARCH_INLINE_READ_TRYLOCK
bool
config ARCH_INLINE_READ_LOCK
bool
config ARCH_INLINE_READ_LOCK_BH
bool
config ARCH_INLINE_READ_LOCK_IRQ
bool
config ARCH_INLINE_READ_LOCK_IRQSAVE
bool
config ARCH_INLINE_READ_UNLOCK
bool
config ARCH_INLINE_READ_UNLOCK_BH
bool
config ARCH_INLINE_READ_UNLOCK_IRQ
bool
config ARCH_INLINE_READ_UNLOCK_IRQRESTORE
bool
config ARCH_INLINE_WRITE_TRYLOCK
bool
config ARCH_INLINE_WRITE_LOCK
bool
config ARCH_INLINE_WRITE_LOCK_BH
bool
config ARCH_INLINE_WRITE_LOCK_IRQ
bool
config ARCH_INLINE_WRITE_LOCK_IRQSAVE
bool
config ARCH_INLINE_WRITE_UNLOCK
bool
config ARCH_INLINE_WRITE_UNLOCK_BH
bool
config ARCH_INLINE_WRITE_UNLOCK_IRQ
bool
config ARCH_INLINE_WRITE_UNLOCK_IRQRESTORE
bool
config UNINLINE_SPIN_UNLOCK
bool
#
# lock_* functions are inlined when:
# - DEBUG_SPINLOCK=n and GENERIC_LOCKBREAK=n and ARCH_INLINE_*LOCK=y
#
# trylock_* functions are inlined when:
# - DEBUG_SPINLOCK=n and ARCH_INLINE_*LOCK=y
#
# unlock and unlock_irq functions are inlined when:
# - DEBUG_SPINLOCK=n and ARCH_INLINE_*LOCK=y
# or
# - DEBUG_SPINLOCK=n and PREEMPTION=n
#
# unlock_bh and unlock_irqrestore functions are inlined when:
# - DEBUG_SPINLOCK=n and ARCH_INLINE_*LOCK=y
#
if !DEBUG_SPINLOCK
config INLINE_SPIN_TRYLOCK
def_bool y
depends on ARCH_INLINE_SPIN_TRYLOCK
config INLINE_SPIN_TRYLOCK_BH
def_bool y
depends on ARCH_INLINE_SPIN_TRYLOCK_BH
config INLINE_SPIN_LOCK
def_bool y
depends on !GENERIC_LOCKBREAK && ARCH_INLINE_SPIN_LOCK
config INLINE_SPIN_LOCK_BH
def_bool y
depends on !GENERIC_LOCKBREAK && ARCH_INLINE_SPIN_LOCK_BH
config INLINE_SPIN_LOCK_IRQ
def_bool y
depends on !GENERIC_LOCKBREAK && ARCH_INLINE_SPIN_LOCK_IRQ
config INLINE_SPIN_LOCK_IRQSAVE
def_bool y
depends on !GENERIC_LOCKBREAK && ARCH_INLINE_SPIN_LOCK_IRQSAVE
config INLINE_SPIN_UNLOCK_BH
def_bool y
depends on ARCH_INLINE_SPIN_UNLOCK_BH
config INLINE_SPIN_UNLOCK_IRQ
def_bool y
depends on !PREEMPTION || ARCH_INLINE_SPIN_UNLOCK_IRQ
config INLINE_SPIN_UNLOCK_IRQRESTORE
def_bool y
depends on ARCH_INLINE_SPIN_UNLOCK_IRQRESTORE
config INLINE_READ_TRYLOCK
def_bool y
depends on ARCH_INLINE_READ_TRYLOCK
config INLINE_READ_LOCK
def_bool y
depends on !GENERIC_LOCKBREAK && ARCH_INLINE_READ_LOCK
config INLINE_READ_LOCK_BH
def_bool y
depends on !GENERIC_LOCKBREAK && ARCH_INLINE_READ_LOCK_BH
config INLINE_READ_LOCK_IRQ
def_bool y
depends on !GENERIC_LOCKBREAK && ARCH_INLINE_READ_LOCK_IRQ
config INLINE_READ_LOCK_IRQSAVE
def_bool y
depends on !GENERIC_LOCKBREAK && ARCH_INLINE_READ_LOCK_IRQSAVE
config INLINE_READ_UNLOCK
def_bool y
depends on !PREEMPTION || ARCH_INLINE_READ_UNLOCK
config INLINE_READ_UNLOCK_BH
def_bool y
depends on ARCH_INLINE_READ_UNLOCK_BH
config INLINE_READ_UNLOCK_IRQ
def_bool y
depends on !PREEMPTION || ARCH_INLINE_READ_UNLOCK_IRQ
config INLINE_READ_UNLOCK_IRQRESTORE
def_bool y
depends on ARCH_INLINE_READ_UNLOCK_IRQRESTORE
config INLINE_WRITE_TRYLOCK
def_bool y
depends on ARCH_INLINE_WRITE_TRYLOCK
config INLINE_WRITE_LOCK
def_bool y
depends on !GENERIC_LOCKBREAK && ARCH_INLINE_WRITE_LOCK
config INLINE_WRITE_LOCK_BH
def_bool y
depends on !GENERIC_LOCKBREAK && ARCH_INLINE_WRITE_LOCK_BH
config INLINE_WRITE_LOCK_IRQ
def_bool y
depends on !GENERIC_LOCKBREAK && ARCH_INLINE_WRITE_LOCK_IRQ
config INLINE_WRITE_LOCK_IRQSAVE
def_bool y
depends on !GENERIC_LOCKBREAK && ARCH_INLINE_WRITE_LOCK_IRQSAVE
config INLINE_WRITE_UNLOCK
def_bool y
depends on !PREEMPTION || ARCH_INLINE_WRITE_UNLOCK
config INLINE_WRITE_UNLOCK_BH
def_bool y
depends on ARCH_INLINE_WRITE_UNLOCK_BH
config INLINE_WRITE_UNLOCK_IRQ
def_bool y
depends on !PREEMPTION || ARCH_INLINE_WRITE_UNLOCK_IRQ
config INLINE_WRITE_UNLOCK_IRQRESTORE
def_bool y
depends on ARCH_INLINE_WRITE_UNLOCK_IRQRESTORE
endif
config ARCH_SUPPORTS_ATOMIC_RMW
bool
config MUTEX_SPIN_ON_OWNER
def_bool y
depends on SMP && ARCH_SUPPORTS_ATOMIC_RMW
config RWSEM_SPIN_ON_OWNER
def_bool y
depends on SMP && ARCH_SUPPORTS_ATOMIC_RMW
config LOCK_SPIN_ON_OWNER
def_bool y
depends on MUTEX_SPIN_ON_OWNER || RWSEM_SPIN_ON_OWNER
config ARCH_USE_QUEUED_SPINLOCKS
bool
config QUEUED_SPINLOCKS
def_bool y if ARCH_USE_QUEUED_SPINLOCKS
depends on SMP
config QUEUED_SPINLOCKS_TRACE_CONTENDED_RELEASE
bool "Trace contended_release on queued spinlocks"
depends on QUEUED_SPINLOCKS && TRACEPOINTS
help
Fire the lock:contended_release tracepoint when a contended queued
spinlock is released, so it is possible to attribute a contended
spinlock to its holder.
Architectures that can patch the unlock site do this at no cost and
do not need this option.
Everywhere else the check is compiled into queued_spin_unlock() and
a small cost is paid on every unlock even when the tracepoint is
disabled: a static-branch NOP and possibly a few more instructions
to manage a stack frame.
Sleeping locks fire lock:contended_release regardless of this option.
If unsure, say N.
config BPF_ARCH_SPINLOCK
bool
config ARCH_USE_QUEUED_RWLOCKS
bool
config QUEUED_RWLOCKS
def_bool y if ARCH_USE_QUEUED_RWLOCKS
depends on SMP && !PREEMPT_RT
config ARCH_HAS_MMIOWB
bool
config MMIOWB
def_bool y if ARCH_HAS_MMIOWB
depends on SMP