diff options
author | Steven Rostedt <srostedt@redhat.com> | 2008-12-03 15:36:59 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-12-04 03:09:36 -0500 |
commit | 804a685162a7080386714166776f57255a75238e (patch) | |
tree | f7b79000146532c0ad6571440652368e2521119a /kernel | |
parent | 0ef8cde56ab92ab3f65221246dc1622c6b5068b3 (diff) |
ftrace: trace single pid for function graph tracer
Impact: New feature
This patch makes the changes to set_ftrace_pid apply to the function
graph tracer.
# echo $$ > /debugfs/tracing/set_ftrace_pid
# echo function_graph > /debugfs/tracing/current_tracer
Will cause only the current task to be traced. Note, the trace flags are
also inherited by child processes, so the children of the shell
will also be traced.
Signed-off-by: Steven Rostedt <srostedt@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/trace/ftrace.c | 2 | ||||
-rw-r--r-- | kernel/trace/trace.c | 3 | ||||
-rw-r--r-- | kernel/trace/trace.h | 10 |
3 files changed, 14 insertions, 1 deletions
diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c index c5049f54a275..57592a9dd630 100644 --- a/kernel/trace/ftrace.c +++ b/kernel/trace/ftrace.c | |||
@@ -48,7 +48,7 @@ int ftrace_enabled __read_mostly; | |||
48 | static int last_ftrace_enabled; | 48 | static int last_ftrace_enabled; |
49 | 49 | ||
50 | /* set when tracing only a pid */ | 50 | /* set when tracing only a pid */ |
51 | static int ftrace_pid_trace = -1; | 51 | int ftrace_pid_trace = -1; |
52 | 52 | ||
53 | /* Quick disabling of function tracer. */ | 53 | /* Quick disabling of function tracer. */ |
54 | int function_trace_stop; | 54 | int function_trace_stop; |
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 710b39acd81b..1bd9574404e5 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c | |||
@@ -1209,6 +1209,9 @@ int trace_graph_entry(struct ftrace_graph_ent *trace) | |||
1209 | int cpu; | 1209 | int cpu; |
1210 | int pc; | 1210 | int pc; |
1211 | 1211 | ||
1212 | if (!ftrace_trace_task(current)) | ||
1213 | return 0; | ||
1214 | |||
1212 | if (!ftrace_graph_addr(trace->func)) | 1215 | if (!ftrace_graph_addr(trace->func)) |
1213 | return 0; | 1216 | return 0; |
1214 | 1217 | ||
diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h index 41f026bfc9ed..95fff37ed970 100644 --- a/kernel/trace/trace.h +++ b/kernel/trace/trace.h | |||
@@ -541,6 +541,16 @@ print_graph_function(struct trace_iterator *iter) | |||
541 | } | 541 | } |
542 | #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ | 542 | #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ |
543 | 543 | ||
544 | extern int ftrace_pid_trace; | ||
545 | |||
546 | static inline int ftrace_trace_task(struct task_struct *task) | ||
547 | { | ||
548 | if (ftrace_pid_trace < 0) | ||
549 | return 1; | ||
550 | |||
551 | return test_tsk_trace_trace(task); | ||
552 | } | ||
553 | |||
544 | /* | 554 | /* |
545 | * trace_iterator_flags is an enumeration that defines bit | 555 | * trace_iterator_flags is an enumeration that defines bit |
546 | * positions into trace_flags that controls the output. | 556 | * positions into trace_flags that controls the output. |