[PATCH] lockdep: stacktrace subsystem, core
Framework to generate and save stacktraces quickly, without printing anything to the console. 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>
This commit is contained in:
parent
f0a5c315eb
commit
8637c09901
4 changed files with 50 additions and 1 deletions
20
include/linux/stacktrace.h
Normal file
20
include/linux/stacktrace.h
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
#ifndef __LINUX_STACKTRACE_H
|
||||||
|
#define __LINUX_STACKTRACE_H
|
||||||
|
|
||||||
|
#ifdef CONFIG_STACKTRACE
|
||||||
|
struct stack_trace {
|
||||||
|
unsigned int nr_entries, max_entries;
|
||||||
|
unsigned long *entries;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern void save_stack_trace(struct stack_trace *trace,
|
||||||
|
struct task_struct *task, int all_contexts,
|
||||||
|
unsigned int skip);
|
||||||
|
|
||||||
|
extern void print_stack_trace(struct stack_trace *trace, int spaces);
|
||||||
|
#else
|
||||||
|
# define save_stack_trace(trace, task, all, skip) do { } while (0)
|
||||||
|
# define print_stack_trace(trace) do { } while (0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
|
@ -10,6 +10,7 @@ obj-y = sched.o fork.o exec_domain.o panic.o printk.o profile.o \
|
||||||
kthread.o wait.o kfifo.o sys_ni.o posix-cpu-timers.o mutex.o \
|
kthread.o wait.o kfifo.o sys_ni.o posix-cpu-timers.o mutex.o \
|
||||||
hrtimer.o
|
hrtimer.o
|
||||||
|
|
||||||
|
obj-$(CONFIG_STACKTRACE) += stacktrace.o
|
||||||
obj-y += time/
|
obj-y += time/
|
||||||
obj-$(CONFIG_DEBUG_MUTEXES) += mutex-debug.o
|
obj-$(CONFIG_DEBUG_MUTEXES) += mutex-debug.o
|
||||||
obj-$(CONFIG_FUTEX) += futex.o
|
obj-$(CONFIG_FUTEX) += futex.o
|
||||||
|
|
24
kernel/stacktrace.c
Normal file
24
kernel/stacktrace.c
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
/*
|
||||||
|
* kernel/stacktrace.c
|
||||||
|
*
|
||||||
|
* Stack trace management functions
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006 Red Hat, Inc., Ingo Molnar <mingo@redhat.com>
|
||||||
|
*/
|
||||||
|
#include <linux/sched.h>
|
||||||
|
#include <linux/kallsyms.h>
|
||||||
|
#include <linux/stacktrace.h>
|
||||||
|
|
||||||
|
void print_stack_trace(struct stack_trace *trace, int spaces)
|
||||||
|
{
|
||||||
|
int i, j;
|
||||||
|
|
||||||
|
for (i = 0; i < trace->nr_entries; i++) {
|
||||||
|
unsigned long ip = trace->entries[i];
|
||||||
|
|
||||||
|
for (j = 0; j < spaces + 1; j++)
|
||||||
|
printk(" ");
|
||||||
|
print_ip_sym(ip);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -107,7 +107,7 @@ config DEBUG_SLAB_LEAK
|
||||||
|
|
||||||
config DEBUG_PREEMPT
|
config DEBUG_PREEMPT
|
||||||
bool "Debug preemptible kernel"
|
bool "Debug preemptible kernel"
|
||||||
depends on DEBUG_KERNEL && PREEMPT
|
depends on DEBUG_KERNEL && PREEMPT && TRACE_IRQFLAGS_SUPPORT
|
||||||
default y
|
default y
|
||||||
help
|
help
|
||||||
If you say Y here then the kernel will use a debug variant of the
|
If you say Y here then the kernel will use a debug variant of the
|
||||||
|
@ -149,6 +149,10 @@ config DEBUG_SPINLOCK_SLEEP
|
||||||
If you say Y here, various routines which may sleep will become very
|
If you say Y here, various routines which may sleep will become very
|
||||||
noisy if they are called with a spinlock held.
|
noisy if they are called with a spinlock held.
|
||||||
|
|
||||||
|
config STACKTRACE
|
||||||
|
bool
|
||||||
|
depends on STACKTRACE_SUPPORT
|
||||||
|
|
||||||
config DEBUG_KOBJECT
|
config DEBUG_KOBJECT
|
||||||
bool "kobject debugging"
|
bool "kobject debugging"
|
||||||
depends on DEBUG_KERNEL
|
depends on DEBUG_KERNEL
|
||||||
|
|
Loading…
Reference in a new issue