# 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