4d9f34ad36
Offer the following lock validation options: CONFIG_PROVE_LOCKING Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Arjan van de Ven <arjan@linux.intel.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
368 lines
13 KiB
Text
368 lines
13 KiB
Text
|
|
config PRINTK_TIME
|
|
bool "Show timing information on printks"
|
|
help
|
|
Selecting this option causes timing information to be
|
|
included in printk output. This allows you to measure
|
|
the interval between kernel operations, including bootup
|
|
operations. This is useful for identifying long delays
|
|
in kernel startup.
|
|
|
|
|
|
config MAGIC_SYSRQ
|
|
bool "Magic SysRq key"
|
|
depends on !UML
|
|
help
|
|
If you say Y here, you will have some control over the system even
|
|
if the system crashes for example during kernel debugging (e.g., you
|
|
will be able to flush the buffer cache to disk, reboot the system
|
|
immediately or dump some status information). This is accomplished
|
|
by pressing various keys while holding SysRq (Alt+PrintScreen). It
|
|
also works on a serial console (on PC hardware at least), if you
|
|
send a BREAK and then within 5 seconds a command keypress. The
|
|
keys are documented in <file:Documentation/sysrq.txt>. Don't say Y
|
|
unless you really know what this hack does.
|
|
|
|
config UNUSED_SYMBOLS
|
|
bool "Enable unused/obsolete exported symbols"
|
|
default y if X86
|
|
help
|
|
Unused but exported symbols make the kernel needlessly bigger. For
|
|
that reason most of these unused exports will soon be removed. This
|
|
option is provided temporarily to provide a transition period in case
|
|
some external kernel module needs one of these symbols anyway. If you
|
|
encounter such a case in your module, consider if you are actually
|
|
using the right API. (rationale: since nobody in the kernel is using
|
|
this in a module, there is a pretty good chance it's actually the
|
|
wrong interface to use). If you really need the symbol, please send a
|
|
mail to the linux kernel mailing list mentioning the symbol and why
|
|
you really need it, and what the merge plan to the mainline kernel for
|
|
your module is.
|
|
|
|
config DEBUG_KERNEL
|
|
bool "Kernel debugging"
|
|
help
|
|
Say Y here if you are developing drivers or trying to debug and
|
|
identify kernel problems.
|
|
|
|
config LOG_BUF_SHIFT
|
|
int "Kernel log buffer size (16 => 64KB, 17 => 128KB)" if DEBUG_KERNEL
|
|
range 12 21
|
|
default 17 if S390 || LOCKDEP
|
|
default 16 if X86_NUMAQ || IA64
|
|
default 15 if SMP
|
|
default 14
|
|
help
|
|
Select kernel log buffer size as a power of 2.
|
|
Defaults and Examples:
|
|
17 => 128 KB for S/390
|
|
16 => 64 KB for x86 NUMAQ or IA-64
|
|
15 => 32 KB for SMP
|
|
14 => 16 KB for uniprocessor
|
|
13 => 8 KB
|
|
12 => 4 KB
|
|
|
|
config DETECT_SOFTLOCKUP
|
|
bool "Detect Soft Lockups"
|
|
depends on DEBUG_KERNEL
|
|
default y
|
|
help
|
|
Say Y here to enable the kernel to detect "soft lockups",
|
|
which are bugs that cause the kernel to loop in kernel
|
|
mode for more than 10 seconds, without giving other tasks a
|
|
chance to run.
|
|
|
|
When a soft-lockup is detected, the kernel will print the
|
|
current stack trace (which you should report), but the
|
|
system will stay locked up. This feature has negligible
|
|
overhead.
|
|
|
|
(Note that "hard lockups" are separate type of bugs that
|
|
can be detected via the NMI-watchdog, on platforms that
|
|
support it.)
|
|
|
|
config SCHEDSTATS
|
|
bool "Collect scheduler statistics"
|
|
depends on DEBUG_KERNEL && PROC_FS
|
|
help
|
|
If you say Y here, additional code will be inserted into the
|
|
scheduler and related routines to collect statistics about
|
|
scheduler behavior and provide them in /proc/schedstat. These
|
|
stats may be useful for both tuning and debugging the scheduler
|
|
If you aren't debugging the scheduler or trying to tune a specific
|
|
application, you can say N to avoid the very slight overhead
|
|
this adds.
|
|
|
|
config DEBUG_SLAB
|
|
bool "Debug slab memory allocations"
|
|
depends on DEBUG_KERNEL && SLAB
|
|
help
|
|
Say Y here to have the kernel do limited verification on memory
|
|
allocation as well as poisoning memory on free to catch use of freed
|
|
memory. This can make kmalloc/kfree-intensive workloads much slower.
|
|
|
|
config DEBUG_SLAB_LEAK
|
|
bool "Memory leak debugging"
|
|
depends on DEBUG_SLAB
|
|
|
|
config DEBUG_PREEMPT
|
|
bool "Debug preemptible kernel"
|
|
depends on DEBUG_KERNEL && PREEMPT && TRACE_IRQFLAGS_SUPPORT
|
|
default y
|
|
help
|
|
If you say Y here then the kernel will use a debug variant of the
|
|
commonly used smp_processor_id() function and will print warnings
|
|
if kernel code uses it in a preemption-unsafe way. Also, the kernel
|
|
will detect preemption count underflows.
|
|
|
|
config DEBUG_RT_MUTEXES
|
|
bool "RT Mutex debugging, deadlock detection"
|
|
depends on DEBUG_KERNEL && RT_MUTEXES
|
|
help
|
|
This allows rt mutex semantics violations and rt mutex related
|
|
deadlocks (lockups) to be detected and reported automatically.
|
|
|
|
config DEBUG_PI_LIST
|
|
bool
|
|
default y
|
|
depends on DEBUG_RT_MUTEXES
|
|
|
|
config RT_MUTEX_TESTER
|
|
bool "Built-in scriptable tester for rt-mutexes"
|
|
depends on DEBUG_KERNEL && RT_MUTEXES
|
|
help
|
|
This option enables a rt-mutex tester.
|
|
|
|
config DEBUG_SPINLOCK
|
|
bool "Spinlock and rw-lock debugging: basic checks"
|
|
depends on DEBUG_KERNEL
|
|
help
|
|
Say Y here and build SMP to catch missing spinlock initialization
|
|
and certain other kinds of spinlock errors commonly made. This is
|
|
best used in conjunction with the NMI watchdog so that spinlock
|
|
deadlocks are also debuggable.
|
|
|
|
config DEBUG_MUTEXES
|
|
bool "Mutex debugging: basic checks"
|
|
depends on DEBUG_KERNEL
|
|
help
|
|
This feature allows mutex semantics violations to be detected and
|
|
reported.
|
|
|
|
config DEBUG_RWSEMS
|
|
bool "RW-sem debugging: basic checks"
|
|
depends on DEBUG_KERNEL
|
|
help
|
|
This feature allows read-write semaphore semantics violations to
|
|
be detected and reported.
|
|
|
|
config DEBUG_LOCK_ALLOC
|
|
bool "Lock debugging: detect incorrect freeing of live locks"
|
|
depends on TRACE_IRQFLAGS_SUPPORT && STACKTRACE_SUPPORT && LOCKDEP_SUPPORT
|
|
select DEBUG_SPINLOCK
|
|
select DEBUG_MUTEXES
|
|
select DEBUG_RWSEMS
|
|
select LOCKDEP
|
|
help
|
|
This feature will check whether any held lock (spinlock, rwlock,
|
|
mutex or rwsem) is incorrectly freed by the kernel, via any of the
|
|
memory-freeing routines (kfree(), kmem_cache_free(), free_pages(),
|
|
vfree(), etc.), whether a live lock is incorrectly reinitialized via
|
|
spin_lock_init()/mutex_init()/etc., or whether there is any lock
|
|
held during task exit.
|
|
|
|
config PROVE_LOCKING
|
|
bool "Lock debugging: prove locking correctness"
|
|
depends on TRACE_IRQFLAGS_SUPPORT && STACKTRACE_SUPPORT && LOCKDEP_SUPPORT
|
|
select LOCKDEP
|
|
select DEBUG_SPINLOCK
|
|
select DEBUG_MUTEXES
|
|
select DEBUG_RWSEMS
|
|
select DEBUG_LOCK_ALLOC
|
|
default n
|
|
help
|
|
This feature enables the kernel to prove that all locking
|
|
that occurs in the kernel runtime is mathematically
|
|
correct: that under no circumstance could an arbitrary (and
|
|
not yet triggered) combination of observed locking
|
|
sequences (on an arbitrary number of CPUs, running an
|
|
arbitrary number of tasks and interrupt contexts) cause a
|
|
deadlock.
|
|
|
|
In short, this feature enables the kernel to report locking
|
|
related deadlocks before they actually occur.
|
|
|
|
The proof does not depend on how hard and complex a
|
|
deadlock scenario would be to trigger: how many
|
|
participant CPUs, tasks and irq-contexts would be needed
|
|
for it to trigger. The proof also does not depend on
|
|
timing: if a race and a resulting deadlock is possible
|
|
theoretically (no matter how unlikely the race scenario
|
|
is), it will be proven so and will immediately be
|
|
reported by the kernel (once the event is observed that
|
|
makes the deadlock theoretically possible).
|
|
|
|
If a deadlock is impossible (i.e. the locking rules, as
|
|
observed by the kernel, are mathematically correct), the
|
|
kernel reports nothing.
|
|
|
|
NOTE: this feature can also be enabled for rwlocks, mutexes
|
|
and rwsems - in which case all dependencies between these
|
|
different locking variants are observed and mapped too, and
|
|
the proof of observed correctness is also maintained for an
|
|
arbitrary combination of these separate locking variants.
|
|
|
|
For more details, see Documentation/lockdep-design.txt.
|
|
|
|
config LOCKDEP
|
|
bool
|
|
depends on TRACE_IRQFLAGS_SUPPORT && STACKTRACE_SUPPORT && LOCKDEP_SUPPORT
|
|
select STACKTRACE
|
|
select FRAME_POINTER
|
|
select KALLSYMS
|
|
select KALLSYMS_ALL
|
|
|
|
config DEBUG_LOCKDEP
|
|
bool "Lock dependency engine debugging"
|
|
depends on LOCKDEP
|
|
help
|
|
If you say Y here, the lock dependency engine will do
|
|
additional runtime checks to debug itself, at the price
|
|
of more runtime overhead.
|
|
|
|
config TRACE_IRQFLAGS
|
|
bool
|
|
default y
|
|
depends on TRACE_IRQFLAGS_SUPPORT
|
|
depends on PROVE_LOCKING
|
|
|
|
config DEBUG_SPINLOCK_SLEEP
|
|
bool "Spinlock debugging: sleep-inside-spinlock checking"
|
|
depends on DEBUG_KERNEL
|
|
help
|
|
If you say Y here, various routines which may sleep will become very
|
|
noisy if they are called with a spinlock held.
|
|
|
|
config DEBUG_LOCKING_API_SELFTESTS
|
|
bool "Locking API boot-time self-tests"
|
|
depends on DEBUG_KERNEL
|
|
help
|
|
Say Y here if you want the kernel to run a short self-test during
|
|
bootup. The self-test checks whether common types of locking bugs
|
|
are detected by debugging mechanisms or not. (if you disable
|
|
lock debugging then those bugs wont be detected of course.)
|
|
The following locking APIs are covered: spinlocks, rwlocks,
|
|
mutexes and rwsems.
|
|
|
|
config STACKTRACE
|
|
bool
|
|
depends on STACKTRACE_SUPPORT
|
|
|
|
config DEBUG_KOBJECT
|
|
bool "kobject debugging"
|
|
depends on DEBUG_KERNEL
|
|
help
|
|
If you say Y here, some extra kobject debugging messages will be sent
|
|
to the syslog.
|
|
|
|
config DEBUG_HIGHMEM
|
|
bool "Highmem debugging"
|
|
depends on DEBUG_KERNEL && HIGHMEM
|
|
help
|
|
This options enables addition error checking for high memory systems.
|
|
Disable for production systems.
|
|
|
|
config DEBUG_BUGVERBOSE
|
|
bool "Verbose BUG() reporting (adds 70K)" if DEBUG_KERNEL && EMBEDDED
|
|
depends on BUG
|
|
depends on ARM || ARM26 || M32R || M68K || SPARC32 || SPARC64 || X86_32 || FRV
|
|
default !EMBEDDED
|
|
help
|
|
Say Y here to make BUG() panics output the file name and line number
|
|
of the BUG call as well as the EIP and oops trace. This aids
|
|
debugging but costs about 70-100K of memory.
|
|
|
|
config DEBUG_INFO
|
|
bool "Compile the kernel with debug info"
|
|
depends on DEBUG_KERNEL
|
|
help
|
|
If you say Y here the resulting kernel image will include
|
|
debugging info resulting in a larger kernel image.
|
|
Say Y here only if you plan to debug the kernel.
|
|
|
|
If unsure, say N.
|
|
|
|
config DEBUG_FS
|
|
bool "Debug Filesystem"
|
|
depends on SYSFS
|
|
help
|
|
debugfs is a virtual file system that kernel developers use to put
|
|
debugging files into. Enable this option to be able to read and
|
|
write to these files.
|
|
|
|
If unsure, say N.
|
|
|
|
config DEBUG_VM
|
|
bool "Debug VM"
|
|
depends on DEBUG_KERNEL
|
|
help
|
|
Enable this to turn on extended checks in the virtual-memory system
|
|
that may impact performance.
|
|
|
|
If unsure, say N.
|
|
|
|
config FRAME_POINTER
|
|
bool "Compile the kernel with frame pointers"
|
|
depends on DEBUG_KERNEL && (X86 || CRIS || M68K || M68KNOMMU || FRV || UML || S390)
|
|
default y if DEBUG_INFO && UML
|
|
help
|
|
If you say Y here the resulting kernel image will be slightly larger
|
|
and slower, but it might give very useful debugging information on
|
|
some architectures or if you use external debuggers.
|
|
If you don't debug the kernel, you can say N.
|
|
|
|
config UNWIND_INFO
|
|
bool "Compile the kernel with frame unwind information"
|
|
depends on !IA64 && !PARISC
|
|
depends on !MODULES || !(MIPS || PPC || SUPERH || V850)
|
|
help
|
|
If you say Y here the resulting kernel image will be slightly larger
|
|
but not slower, and it will give very useful debugging information.
|
|
If you don't debug the kernel, you can say N, but we may not be able
|
|
to solve problems without frame unwind information or frame pointers.
|
|
|
|
config STACK_UNWIND
|
|
bool "Stack unwind support"
|
|
depends on UNWIND_INFO
|
|
depends on X86
|
|
help
|
|
This enables more precise stack traces, omitting all unrelated
|
|
occurrences of pointers into kernel code from the dump.
|
|
|
|
config FORCED_INLINING
|
|
bool "Force gcc to inline functions marked 'inline'"
|
|
depends on DEBUG_KERNEL
|
|
default y
|
|
help
|
|
This option determines if the kernel forces gcc to inline the functions
|
|
developers have marked 'inline'. Doing so takes away freedom from gcc to
|
|
do what it thinks is best, which is desirable for the gcc 3.x series of
|
|
compilers. The gcc 4.x series have a rewritten inlining algorithm and
|
|
disabling this option will generate a smaller kernel there. Hopefully
|
|
this algorithm is so good that allowing gcc4 to make the decision can
|
|
become the default in the future, until then this option is there to
|
|
test gcc for this.
|
|
|
|
config RCU_TORTURE_TEST
|
|
tristate "torture tests for RCU"
|
|
depends on DEBUG_KERNEL
|
|
default n
|
|
help
|
|
This option provides a kernel module that runs torture tests
|
|
on the RCU infrastructure. The kernel module may be built
|
|
after the fact on the running kernel to be tested, if desired.
|
|
|
|
Say Y here if you want RCU torture tests to start automatically
|
|
at boot time (you probably don't).
|
|
Say M if you want the RCU torture tests to build as a module.
|
|
Say N if you are unsure.
|