Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 100420
b: refs/heads/master
c: 1b29b01
h: refs/heads/master
v: v3
  • Loading branch information
Steven Rostedt authored and Thomas Gleixner committed May 23, 2008
1 parent c201572 commit 8478e58
Show file tree
Hide file tree
Showing 4 changed files with 88 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: bc0c38d139ec7fcd5c030aea16b008f3732e42ac
refs/heads/master: 1b29b01887e6032dcaf818c14999c7a39593b4e7
13 changes: 13 additions & 0 deletions trunk/kernel/trace/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,16 @@ config TRACING
bool
select DEBUG_FS

config FTRACE
bool "Kernel Function Tracer"
depends on DEBUG_KERNEL && HAVE_FTRACE
select FRAME_POINTER
select TRACING
help
Enable the kernel to trace every kernel function. This is done
by using a compiler feature to insert a small, 5-byte No-Operation
instruction to the beginning of every kernel function, which NOP
sequence is then dynamically patched into a tracer call when
tracing is enabled by the administrator. If it's runtime disabled
(the bootup default), then the overhead of the instructions is very
small and not measurable even in micro-benchmarks.
1 change: 1 addition & 0 deletions trunk/kernel/trace/Makefile
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
obj-$(CONFIG_FTRACE) += libftrace.o

obj-$(CONFIG_TRACING) += trace.o
obj-$(CONFIG_FTRACE) += trace_functions.o

libftrace-y := ftrace.o
73 changes: 73 additions & 0 deletions trunk/kernel/trace/trace_functions.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
/*
* ring buffer based function tracer
*
* Copyright (C) 2007-2008 Steven Rostedt <srostedt@redhat.com>
* Copyright (C) 2008 Ingo Molnar <mingo@redhat.com>
*
* Based on code from the latency_tracer, that is:
*
* Copyright (C) 2004-2006 Ingo Molnar
* Copyright (C) 2004 William Lee Irwin III
*/
#include <linux/fs.h>
#include <linux/debugfs.h>
#include <linux/uaccess.h>
#include <linux/ftrace.h>

#include "trace.h"

static notrace void function_reset(struct trace_array *tr)
{
int cpu;

tr->time_start = now(tr->cpu);

for_each_online_cpu(cpu)
tracing_reset(tr->data[cpu]);
}

static notrace void start_function_trace(struct trace_array *tr)
{
function_reset(tr);
tracing_start_function_trace();
}

static notrace void stop_function_trace(struct trace_array *tr)
{
tracing_stop_function_trace();
}

static notrace void function_trace_init(struct trace_array *tr)
{
if (tr->ctrl)
start_function_trace(tr);
}

static notrace void function_trace_reset(struct trace_array *tr)
{
if (tr->ctrl)
stop_function_trace(tr);
}

static notrace void function_trace_ctrl_update(struct trace_array *tr)
{
if (tr->ctrl)
start_function_trace(tr);
else
stop_function_trace(tr);
}

static struct tracer function_trace __read_mostly =
{
.name = "ftrace",
.init = function_trace_init,
.reset = function_trace_reset,
.ctrl_update = function_trace_ctrl_update,
};

static __init int init_function_trace(void)
{
return register_tracer(&function_trace);
}

device_initcall(init_function_trace);

0 comments on commit 8478e58

Please sign in to comment.