Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 178068
b: refs/heads/master
c: 06d65bd
h: refs/heads/master
v: v3
  • Loading branch information
Frederic Weisbecker authored and Ingo Molnar committed Dec 17, 2009
1 parent 3761650 commit 895fd82
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 4 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 61c1917f47f73c968e92d04d15370b1dc3ec4592
refs/heads/master: 06d65bda75341485d32f33da474b0664819ad497
6 changes: 6 additions & 0 deletions trunk/arch/x86/include/asm/stacktrace.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,12 @@ print_context_stack(struct thread_info *tinfo,
const struct stacktrace_ops *ops, void *data,
unsigned long *end, int *graph);

extern unsigned long
print_context_stack_bp(struct thread_info *tinfo,
unsigned long *stack, unsigned long bp,
const struct stacktrace_ops *ops, void *data,
unsigned long *end, int *graph);

/* Generic stack tracer with callbacks */

struct stacktrace_ops {
Expand Down
2 changes: 1 addition & 1 deletion trunk/arch/x86/kernel/cpu/perf_event.c
Original file line number Diff line number Diff line change
Expand Up @@ -2336,7 +2336,7 @@ static const struct stacktrace_ops backtrace_ops = {
.warning_symbol = backtrace_warning_symbol,
.stack = backtrace_stack,
.address = backtrace_address,
.walk_stack = print_context_stack,
.walk_stack = print_context_stack_bp,
};

#include "../dumpstack.h"
Expand Down
28 changes: 26 additions & 2 deletions trunk/arch/x86/kernel/dumpstack.c
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,30 @@ print_context_stack(struct thread_info *tinfo,
}
return bp;
}
EXPORT_SYMBOL_GPL(print_context_stack);

unsigned long
print_context_stack_bp(struct thread_info *tinfo,
unsigned long *stack, unsigned long bp,
const struct stacktrace_ops *ops, void *data,
unsigned long *end, int *graph)
{
struct stack_frame *frame = (struct stack_frame *)bp;
unsigned long *ret_addr = &frame->return_address;

while (valid_stack_ptr(tinfo, ret_addr, sizeof(*ret_addr), end)) {
unsigned long addr = *ret_addr;

if (__kernel_text_address(addr)) {
ops->address(data, addr, 1);
frame = frame->next_frame;
ret_addr = &frame->return_address;
print_ftrace_graph_addr(addr, data, ops, tinfo, graph);
}
}
return (unsigned long)frame;
}
EXPORT_SYMBOL_GPL(print_context_stack_bp);


static void
Expand Down Expand Up @@ -143,8 +167,8 @@ static void print_trace_address(void *data, unsigned long addr, int reliable)
static const struct stacktrace_ops print_trace_ops = {
.warning = print_trace_warning,
.warning_symbol = print_trace_warning_symbol,
.stack = print_trace_stack,
.address = print_trace_address,
.stack = print_trace_stack,
.address = print_trace_address,
.walk_stack = print_context_stack,
};

Expand Down

0 comments on commit 895fd82

Please sign in to comment.