xref: /linux/kernel/Kconfig.locks (revision dfa35434d7f20142fedd7120277b1044a0a2bb64)
1# SPDX-License-Identifier: GPL-2.0-only
2#
3# The ARCH_INLINE foo is necessary because select ignores "depends on"
4#
5config ARCH_INLINE_SPIN_TRYLOCK
6	bool
7
8config ARCH_INLINE_SPIN_TRYLOCK_BH
9	bool
10
11config ARCH_INLINE_SPIN_LOCK
12	bool
13
14config ARCH_INLINE_SPIN_LOCK_BH
15	bool
16
17config ARCH_INLINE_SPIN_LOCK_IRQ
18	bool
19
20config ARCH_INLINE_SPIN_LOCK_IRQSAVE
21	bool
22
23config ARCH_INLINE_SPIN_UNLOCK
24	bool
25
26config ARCH_INLINE_SPIN_UNLOCK_BH
27	bool
28
29config ARCH_INLINE_SPIN_UNLOCK_IRQ
30	bool
31
32config ARCH_INLINE_SPIN_UNLOCK_IRQRESTORE
33	bool
34
35
36config ARCH_INLINE_READ_TRYLOCK
37	bool
38
39config ARCH_INLINE_READ_LOCK
40	bool
41
42config ARCH_INLINE_READ_LOCK_BH
43	bool
44
45config ARCH_INLINE_READ_LOCK_IRQ
46	bool
47
48config ARCH_INLINE_READ_LOCK_IRQSAVE
49	bool
50
51config ARCH_INLINE_READ_UNLOCK
52	bool
53
54config ARCH_INLINE_READ_UNLOCK_BH
55	bool
56
57config ARCH_INLINE_READ_UNLOCK_IRQ
58	bool
59
60config ARCH_INLINE_READ_UNLOCK_IRQRESTORE
61	bool
62
63
64config ARCH_INLINE_WRITE_TRYLOCK
65	bool
66
67config ARCH_INLINE_WRITE_LOCK
68	bool
69
70config ARCH_INLINE_WRITE_LOCK_BH
71	bool
72
73config ARCH_INLINE_WRITE_LOCK_IRQ
74	bool
75
76config ARCH_INLINE_WRITE_LOCK_IRQSAVE
77	bool
78
79config ARCH_INLINE_WRITE_UNLOCK
80	bool
81
82config ARCH_INLINE_WRITE_UNLOCK_BH
83	bool
84
85config ARCH_INLINE_WRITE_UNLOCK_IRQ
86	bool
87
88config ARCH_INLINE_WRITE_UNLOCK_IRQRESTORE
89	bool
90
91config UNINLINE_SPIN_UNLOCK
92	bool
93
94#
95# lock_* functions are inlined when:
96#   - DEBUG_SPINLOCK=n and GENERIC_LOCKBREAK=n and ARCH_INLINE_*LOCK=y
97#
98# trylock_* functions are inlined when:
99#   - DEBUG_SPINLOCK=n and ARCH_INLINE_*LOCK=y
100#
101# unlock and unlock_irq functions are inlined when:
102#   - DEBUG_SPINLOCK=n and ARCH_INLINE_*LOCK=y
103#  or
104#   - DEBUG_SPINLOCK=n and PREEMPTION=n
105#
106# unlock_bh and unlock_irqrestore functions are inlined when:
107#   - DEBUG_SPINLOCK=n and ARCH_INLINE_*LOCK=y
108#
109
110if !DEBUG_SPINLOCK
111
112config INLINE_SPIN_TRYLOCK
113	def_bool y
114	depends on ARCH_INLINE_SPIN_TRYLOCK
115
116config INLINE_SPIN_TRYLOCK_BH
117	def_bool y
118	depends on ARCH_INLINE_SPIN_TRYLOCK_BH
119
120config INLINE_SPIN_LOCK
121	def_bool y
122	depends on !GENERIC_LOCKBREAK && ARCH_INLINE_SPIN_LOCK
123
124config INLINE_SPIN_LOCK_BH
125	def_bool y
126	depends on !GENERIC_LOCKBREAK && ARCH_INLINE_SPIN_LOCK_BH
127
128config INLINE_SPIN_LOCK_IRQ
129	def_bool y
130	depends on !GENERIC_LOCKBREAK && ARCH_INLINE_SPIN_LOCK_IRQ
131
132config INLINE_SPIN_LOCK_IRQSAVE
133	def_bool y
134	depends on !GENERIC_LOCKBREAK && ARCH_INLINE_SPIN_LOCK_IRQSAVE
135
136config INLINE_SPIN_UNLOCK_BH
137	def_bool y
138	depends on ARCH_INLINE_SPIN_UNLOCK_BH
139
140config INLINE_SPIN_UNLOCK_IRQ
141	def_bool y
142	depends on !PREEMPTION || ARCH_INLINE_SPIN_UNLOCK_IRQ
143
144config INLINE_SPIN_UNLOCK_IRQRESTORE
145	def_bool y
146	depends on ARCH_INLINE_SPIN_UNLOCK_IRQRESTORE
147
148
149config INLINE_READ_TRYLOCK
150	def_bool y
151	depends on ARCH_INLINE_READ_TRYLOCK
152
153config INLINE_READ_LOCK
154	def_bool y
155	depends on !GENERIC_LOCKBREAK && ARCH_INLINE_READ_LOCK
156
157config INLINE_READ_LOCK_BH
158	def_bool y
159	depends on !GENERIC_LOCKBREAK && ARCH_INLINE_READ_LOCK_BH
160
161config INLINE_READ_LOCK_IRQ
162	def_bool y
163	depends on !GENERIC_LOCKBREAK && ARCH_INLINE_READ_LOCK_IRQ
164
165config INLINE_READ_LOCK_IRQSAVE
166	def_bool y
167	depends on !GENERIC_LOCKBREAK && ARCH_INLINE_READ_LOCK_IRQSAVE
168
169config INLINE_READ_UNLOCK
170	def_bool y
171	depends on !PREEMPTION || ARCH_INLINE_READ_UNLOCK
172
173config INLINE_READ_UNLOCK_BH
174	def_bool y
175	depends on ARCH_INLINE_READ_UNLOCK_BH
176
177config INLINE_READ_UNLOCK_IRQ
178	def_bool y
179	depends on !PREEMPTION || ARCH_INLINE_READ_UNLOCK_IRQ
180
181config INLINE_READ_UNLOCK_IRQRESTORE
182	def_bool y
183	depends on ARCH_INLINE_READ_UNLOCK_IRQRESTORE
184
185
186config INLINE_WRITE_TRYLOCK
187	def_bool y
188	depends on ARCH_INLINE_WRITE_TRYLOCK
189
190config INLINE_WRITE_LOCK
191	def_bool y
192	depends on !GENERIC_LOCKBREAK && ARCH_INLINE_WRITE_LOCK
193
194config INLINE_WRITE_LOCK_BH
195	def_bool y
196	depends on !GENERIC_LOCKBREAK && ARCH_INLINE_WRITE_LOCK_BH
197
198config INLINE_WRITE_LOCK_IRQ
199	def_bool y
200	depends on !GENERIC_LOCKBREAK && ARCH_INLINE_WRITE_LOCK_IRQ
201
202config INLINE_WRITE_LOCK_IRQSAVE
203	def_bool y
204	depends on !GENERIC_LOCKBREAK && ARCH_INLINE_WRITE_LOCK_IRQSAVE
205
206config INLINE_WRITE_UNLOCK
207	def_bool y
208	depends on !PREEMPTION || ARCH_INLINE_WRITE_UNLOCK
209
210config INLINE_WRITE_UNLOCK_BH
211	def_bool y
212	depends on ARCH_INLINE_WRITE_UNLOCK_BH
213
214config INLINE_WRITE_UNLOCK_IRQ
215	def_bool y
216	depends on !PREEMPTION || ARCH_INLINE_WRITE_UNLOCK_IRQ
217
218config INLINE_WRITE_UNLOCK_IRQRESTORE
219	def_bool y
220	depends on ARCH_INLINE_WRITE_UNLOCK_IRQRESTORE
221
222endif
223
224config ARCH_SUPPORTS_ATOMIC_RMW
225	bool
226
227config MUTEX_SPIN_ON_OWNER
228	def_bool y
229	depends on SMP && ARCH_SUPPORTS_ATOMIC_RMW
230
231config RWSEM_SPIN_ON_OWNER
232       def_bool y
233       depends on SMP && ARCH_SUPPORTS_ATOMIC_RMW
234
235config LOCK_SPIN_ON_OWNER
236       def_bool y
237       depends on MUTEX_SPIN_ON_OWNER || RWSEM_SPIN_ON_OWNER
238
239config ARCH_USE_QUEUED_SPINLOCKS
240	bool
241
242config QUEUED_SPINLOCKS
243	def_bool y if ARCH_USE_QUEUED_SPINLOCKS
244	depends on SMP
245
246config QUEUED_SPINLOCKS_TRACE_CONTENDED_RELEASE
247	bool "Trace contended_release on queued spinlocks"
248	depends on QUEUED_SPINLOCKS && TRACEPOINTS
249	help
250	  Fire the lock:contended_release tracepoint when a contended queued
251	  spinlock is released, so it is possible to attribute a contended
252	  spinlock to its holder.
253
254	  Architectures that can patch the unlock site do this at no cost and
255	  do not need this option.
256
257	  Everywhere else the check is compiled into queued_spin_unlock() and
258	  a small cost is paid on every unlock even when the tracepoint is
259	  disabled: a static-branch NOP and possibly a few more instructions
260	  to manage a stack frame.
261
262	  Sleeping locks fire lock:contended_release regardless of this option.
263
264	  If unsure, say N.
265
266config BPF_ARCH_SPINLOCK
267	bool
268
269config ARCH_USE_QUEUED_RWLOCKS
270	bool
271
272config QUEUED_RWLOCKS
273	def_bool y if ARCH_USE_QUEUED_RWLOCKS
274	depends on SMP && !PREEMPT_RT
275
276config ARCH_HAS_MMIOWB
277	bool
278
279config MMIOWB
280	def_bool y if ARCH_HAS_MMIOWB
281	depends on SMP
282