cae2ed9aa5
Introduce DEBUG_LOCKING_API_SELFTESTS, which uses the generic lock debugging code's silent-failure feature to run a matrix of testcases. There are 210 testcases currently: +----------------------- | Locking API testsuite: +------------------------------+------+------+------+------+------+------+ | spin |wlock |rlock |mutex | wsem | rsem | -------------------------------+------+------+------+------+------+------+ A-A deadlock: ok | ok | ok | ok | ok | ok | A-B-B-A deadlock: ok | ok | ok | ok | ok | ok | A-B-B-C-C-A deadlock: ok | ok | ok | ok | ok | ok | A-B-C-A-B-C deadlock: ok | ok | ok | ok | ok | ok | A-B-B-C-C-D-D-A deadlock: ok | ok | ok | ok | ok | ok | A-B-C-D-B-D-D-A deadlock: ok | ok | ok | ok | ok | ok | A-B-C-D-B-C-D-A deadlock: ok | ok | ok | ok | ok | ok | double unlock: ok | ok | ok | ok | ok | ok | bad unlock order: ok | ok | ok | ok | ok | ok | --------------------------------------+------+------+------+------+------+ recursive read-lock: | ok | | ok | --------------------------------------+------+------+------+------+------+ non-nested unlock: ok | ok | ok | ok | --------------------------------------+------+------+------+ hard-irqs-on + irq-safe-A/12: ok | ok | ok | soft-irqs-on + irq-safe-A/12: ok | ok | ok | hard-irqs-on + irq-safe-A/21: ok | ok | ok | soft-irqs-on + irq-safe-A/21: ok | ok | ok | sirq-safe-A => hirqs-on/12: ok | ok | ok | sirq-safe-A => hirqs-on/21: ok | ok | ok | hard-safe-A + irqs-on/12: ok | ok | ok | soft-safe-A + irqs-on/12: ok | ok | ok | hard-safe-A + irqs-on/21: ok | ok | ok | soft-safe-A + irqs-on/21: ok | ok | ok | hard-safe-A + unsafe-B #1/123: ok | ok | ok | soft-safe-A + unsafe-B #1/123: ok | ok | ok | hard-safe-A + unsafe-B #1/132: ok | ok | ok | soft-safe-A + unsafe-B #1/132: ok | ok | ok | hard-safe-A + unsafe-B #1/213: ok | ok | ok | soft-safe-A + unsafe-B #1/213: ok | ok | ok | hard-safe-A + unsafe-B #1/231: ok | ok | ok | soft-safe-A + unsafe-B #1/231: ok | ok | ok | hard-safe-A + unsafe-B #1/312: ok | ok | ok | soft-safe-A + unsafe-B #1/312: ok | ok | ok | hard-safe-A + unsafe-B #1/321: ok | ok | ok | soft-safe-A + unsafe-B #1/321: ok | ok | ok | hard-safe-A + unsafe-B #2/123: ok | ok | ok | soft-safe-A + unsafe-B #2/123: ok | ok | ok | hard-safe-A + unsafe-B #2/132: ok | ok | ok | soft-safe-A + unsafe-B #2/132: ok | ok | ok | hard-safe-A + unsafe-B #2/213: ok | ok | ok | soft-safe-A + unsafe-B #2/213: ok | ok | ok | hard-safe-A + unsafe-B #2/231: ok | ok | ok | soft-safe-A + unsafe-B #2/231: ok | ok | ok | hard-safe-A + unsafe-B #2/312: ok | ok | ok | soft-safe-A + unsafe-B #2/312: ok | ok | ok | hard-safe-A + unsafe-B #2/321: ok | ok | ok | soft-safe-A + unsafe-B #2/321: ok | ok | ok | hard-irq lock-inversion/123: ok | ok | ok | soft-irq lock-inversion/123: ok | ok | ok | hard-irq lock-inversion/132: ok | ok | ok | soft-irq lock-inversion/132: ok | ok | ok | hard-irq lock-inversion/213: ok | ok | ok | soft-irq lock-inversion/213: ok | ok | ok | hard-irq lock-inversion/231: ok | ok | ok | soft-irq lock-inversion/231: ok | ok | ok | hard-irq lock-inversion/312: ok | ok | ok | soft-irq lock-inversion/312: ok | ok | ok | hard-irq lock-inversion/321: ok | ok | ok | soft-irq lock-inversion/321: ok | ok | ok | hard-irq read-recursion/123: ok | soft-irq read-recursion/123: ok | hard-irq read-recursion/132: ok | soft-irq read-recursion/132: ok | hard-irq read-recursion/213: ok | soft-irq read-recursion/213: ok | hard-irq read-recursion/231: ok | soft-irq read-recursion/231: ok | hard-irq read-recursion/312: ok | soft-irq read-recursion/312: ok | hard-irq read-recursion/321: ok | soft-irq read-recursion/321: ok | --------------------------------+-----+---------------- Good, all 210 testcases passed! | --------------------------------+ 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>
275 lines
9.4 KiB
Plaintext
275 lines
9.4 KiB
Plaintext
|
|
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
|
|
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 debugging"
|
|
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_SPINLOCK_SLEEP
|
|
bool "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.
|