Skip to content

Commit

Permalink
[PATCH] lockdep: stacktrace subsystem, core
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Ingo Molnar authored and Linus Torvalds committed Jul 3, 2006
1 parent f0a5c31 commit 8637c09
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 1 deletion.
20 changes: 20 additions & 0 deletions include/linux/stacktrace.h
Original file line number Diff line number Diff line change
@@ -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
1 change: 1 addition & 0 deletions kernel/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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 \
hrtimer.o

obj-$(CONFIG_STACKTRACE) += stacktrace.o
obj-y += time/
obj-$(CONFIG_DEBUG_MUTEXES) += mutex-debug.o
obj-$(CONFIG_FUTEX) += futex.o
Expand Down
24 changes: 24 additions & 0 deletions kernel/stacktrace.c
Original file line number Diff line number Diff line change
@@ -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);
}
}

6 changes: 5 additions & 1 deletion lib/Kconfig.debug
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ config DEBUG_SLAB_LEAK

config DEBUG_PREEMPT
bool "Debug preemptible kernel"
depends on DEBUG_KERNEL && PREEMPT
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
Expand Down Expand Up @@ -149,6 +149,10 @@ config DEBUG_SPINLOCK_SLEEP
If you say Y here, various routines which may sleep will become very
noisy if they are called with a spinlock held.

config STACKTRACE
bool
depends on STACKTRACE_SUPPORT

config DEBUG_KOBJECT
bool "kobject debugging"
depends on DEBUG_KERNEL
Expand Down

0 comments on commit 8637c09

Please sign in to comment.