-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Frederic Weisbecker
authored and
Ingo Molnar
committed
Nov 11, 2008
1 parent
11d692f
commit edf8e00
Showing
7 changed files
with
206 additions
and
9 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,2 @@ | ||
--- | ||
refs/heads/master: caf4b323b02a16c92fba449952ac6515ddc76d7a | ||
refs/heads/master: 15e6cb3673ea6277999642802406a764b49391b0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,82 @@ | ||
/* | ||
* | ||
* Function return tracer. | ||
* Copyright (c) 2008 Frederic Weisbecker <fweisbec@gmail.com> | ||
* Mostly borrowed from function tracer which | ||
* is Copyright (c) Steven Rostedt <srostedt@redhat.com> | ||
* | ||
*/ | ||
#include <linux/debugfs.h> | ||
#include <linux/uaccess.h> | ||
#include <linux/ftrace.h> | ||
#include <linux/fs.h> | ||
|
||
#include "trace.h" | ||
|
||
|
||
static void start_return_trace(struct trace_array *tr) | ||
{ | ||
register_ftrace_return(&trace_function_return); | ||
} | ||
|
||
static void stop_return_trace(struct trace_array *tr) | ||
{ | ||
unregister_ftrace_return(); | ||
} | ||
|
||
static void return_trace_init(struct trace_array *tr) | ||
{ | ||
int cpu; | ||
for_each_online_cpu(cpu) | ||
tracing_reset(tr, cpu); | ||
|
||
start_return_trace(tr); | ||
} | ||
|
||
static void return_trace_reset(struct trace_array *tr) | ||
{ | ||
stop_return_trace(tr); | ||
} | ||
|
||
|
||
enum print_line_t | ||
print_return_function(struct trace_iterator *iter) | ||
{ | ||
struct trace_seq *s = &iter->seq; | ||
struct trace_entry *entry = iter->ent; | ||
struct ftrace_ret_entry *field; | ||
int ret; | ||
|
||
if (entry->type == TRACE_FN_RET) { | ||
trace_assign_type(field, entry); | ||
ret = trace_seq_printf(s, "%pF -> ", (void *)field->parent_ip); | ||
if (!ret) | ||
return TRACE_TYPE_PARTIAL_LINE; | ||
ret = seq_print_ip_sym(s, field->ip, | ||
trace_flags & TRACE_ITER_SYM_MASK); | ||
if (!ret) | ||
return TRACE_TYPE_PARTIAL_LINE; | ||
ret = trace_seq_printf(s, " (%llu ns)\n", | ||
field->rettime - field->calltime); | ||
if (!ret) | ||
return TRACE_TYPE_PARTIAL_LINE; | ||
else | ||
return TRACE_TYPE_HANDLED; | ||
} | ||
return TRACE_TYPE_UNHANDLED; | ||
} | ||
|
||
static struct tracer return_trace __read_mostly = | ||
{ | ||
.name = "return", | ||
.init = return_trace_init, | ||
.reset = return_trace_reset, | ||
.print_line = print_return_function | ||
}; | ||
|
||
static __init int init_return_trace(void) | ||
{ | ||
return register_tracer(&return_trace); | ||
} | ||
|
||
device_initcall(init_return_trace); |