diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Kconfig.debug | 98 |
1 files changed, 96 insertions, 2 deletions
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index 16c2e98b7638..e5889b1a33ff 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug | |||
@@ -134,7 +134,7 @@ config RT_MUTEX_TESTER | |||
134 | This option enables a rt-mutex tester. | 134 | This option enables a rt-mutex tester. |
135 | 135 | ||
136 | config DEBUG_SPINLOCK | 136 | config DEBUG_SPINLOCK |
137 | bool "Spinlock debugging" | 137 | bool "Spinlock and rw-lock debugging: basic checks" |
138 | depends on DEBUG_KERNEL | 138 | depends on DEBUG_KERNEL |
139 | help | 139 | help |
140 | Say Y here and build SMP to catch missing spinlock initialization | 140 | Say Y here and build SMP to catch missing spinlock initialization |
@@ -142,8 +142,102 @@ config DEBUG_SPINLOCK | |||
142 | best used in conjunction with the NMI watchdog so that spinlock | 142 | best used in conjunction with the NMI watchdog so that spinlock |
143 | deadlocks are also debuggable. | 143 | deadlocks are also debuggable. |
144 | 144 | ||
145 | config DEBUG_MUTEXES | ||
146 | bool "Mutex debugging: basic checks" | ||
147 | depends on DEBUG_KERNEL | ||
148 | help | ||
149 | This feature allows mutex semantics violations to be detected and | ||
150 | reported. | ||
151 | |||
152 | config DEBUG_RWSEMS | ||
153 | bool "RW-sem debugging: basic checks" | ||
154 | depends on DEBUG_KERNEL | ||
155 | help | ||
156 | This feature allows read-write semaphore semantics violations to | ||
157 | be detected and reported. | ||
158 | |||
159 | config DEBUG_LOCK_ALLOC | ||
160 | bool "Lock debugging: detect incorrect freeing of live locks" | ||
161 | depends on TRACE_IRQFLAGS_SUPPORT && STACKTRACE_SUPPORT && LOCKDEP_SUPPORT | ||
162 | select DEBUG_SPINLOCK | ||
163 | select DEBUG_MUTEXES | ||
164 | select DEBUG_RWSEMS | ||
165 | select LOCKDEP | ||
166 | help | ||
167 | This feature will check whether any held lock (spinlock, rwlock, | ||
168 | mutex or rwsem) is incorrectly freed by the kernel, via any of the | ||
169 | memory-freeing routines (kfree(), kmem_cache_free(), free_pages(), | ||
170 | vfree(), etc.), whether a live lock is incorrectly reinitialized via | ||
171 | spin_lock_init()/mutex_init()/etc., or whether there is any lock | ||
172 | held during task exit. | ||
173 | |||
174 | config PROVE_LOCKING | ||
175 | bool "Lock debugging: prove locking correctness" | ||
176 | depends on TRACE_IRQFLAGS_SUPPORT && STACKTRACE_SUPPORT && LOCKDEP_SUPPORT | ||
177 | select LOCKDEP | ||
178 | select DEBUG_SPINLOCK | ||
179 | select DEBUG_MUTEXES | ||
180 | select DEBUG_RWSEMS | ||
181 | select DEBUG_LOCK_ALLOC | ||
182 | default n | ||
183 | help | ||
184 | This feature enables the kernel to prove that all locking | ||
185 | that occurs in the kernel runtime is mathematically | ||
186 | correct: that under no circumstance could an arbitrary (and | ||
187 | not yet triggered) combination of observed locking | ||
188 | sequences (on an arbitrary number of CPUs, running an | ||
189 | arbitrary number of tasks and interrupt contexts) cause a | ||
190 | deadlock. | ||
191 | |||
192 | In short, this feature enables the kernel to report locking | ||
193 | related deadlocks before they actually occur. | ||
194 | |||
195 | The proof does not depend on how hard and complex a | ||
196 | deadlock scenario would be to trigger: how many | ||
197 | participant CPUs, tasks and irq-contexts would be needed | ||
198 | for it to trigger. The proof also does not depend on | ||
199 | timing: if a race and a resulting deadlock is possible | ||
200 | theoretically (no matter how unlikely the race scenario | ||
201 | is), it will be proven so and will immediately be | ||
202 | reported by the kernel (once the event is observed that | ||
203 | makes the deadlock theoretically possible). | ||
204 | |||
205 | If a deadlock is impossible (i.e. the locking rules, as | ||
206 | observed by the kernel, are mathematically correct), the | ||
207 | kernel reports nothing. | ||
208 | |||
209 | NOTE: this feature can also be enabled for rwlocks, mutexes | ||
210 | and rwsems - in which case all dependencies between these | ||
211 | different locking variants are observed and mapped too, and | ||
212 | the proof of observed correctness is also maintained for an | ||
213 | arbitrary combination of these separate locking variants. | ||
214 | |||
215 | For more details, see Documentation/lockdep-design.txt. | ||
216 | |||
217 | config LOCKDEP | ||
218 | bool | ||
219 | depends on TRACE_IRQFLAGS_SUPPORT && STACKTRACE_SUPPORT && LOCKDEP_SUPPORT | ||
220 | select STACKTRACE | ||
221 | select FRAME_POINTER | ||
222 | select KALLSYMS | ||
223 | select KALLSYMS_ALL | ||
224 | |||
225 | config DEBUG_LOCKDEP | ||
226 | bool "Lock dependency engine debugging" | ||
227 | depends on LOCKDEP | ||
228 | help | ||
229 | If you say Y here, the lock dependency engine will do | ||
230 | additional runtime checks to debug itself, at the price | ||
231 | of more runtime overhead. | ||
232 | |||
233 | config TRACE_IRQFLAGS | ||
234 | bool | ||
235 | default y | ||
236 | depends on TRACE_IRQFLAGS_SUPPORT | ||
237 | depends on PROVE_LOCKING | ||
238 | |||
145 | config DEBUG_SPINLOCK_SLEEP | 239 | config DEBUG_SPINLOCK_SLEEP |
146 | bool "Sleep-inside-spinlock checking" | 240 | bool "Spinlock debugging: sleep-inside-spinlock checking" |
147 | depends on DEBUG_KERNEL | 241 | depends on DEBUG_KERNEL |
148 | help | 242 | help |
149 | If you say Y here, various routines which may sleep will become very | 243 | If you say Y here, various routines which may sleep will become very |