aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Rostedt (Red Hat) <rostedt@goodmis.org>2015-09-29 19:06:50 -0400
committerSteven Rostedt <rostedt@goodmis.org>2015-09-30 15:22:42 -0400
commit55577204154c7a95c6bce4cb185366d638b238b5 (patch)
tree9cbfd57e11d2ee00c015980459fe978b99a8d597
parentb9f9108cad3998a4c8fd26051c37a451f1dff1f1 (diff)
tracing: Move sleep-time and graph-time options out of the core trace_flags
The sleep-time and graph-time options are only for the function graph tracer and are not used by anything else. As tracer options are now visible when the tracer is not activated, its better to move the function graph specific tracer options into the function graph tracer. Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
-rw-r--r--kernel/trace/ftrace.c19
-rw-r--r--kernel/trace/trace.c2
-rw-r--r--kernel/trace/trace.h11
-rw-r--r--kernel/trace/trace_functions_graph.c13
4 files changed, 35 insertions, 10 deletions
diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index b0623ac785a2..e76384894147 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -243,6 +243,11 @@ static void ftrace_sync_ipi(void *data)
243 243
244#ifdef CONFIG_FUNCTION_GRAPH_TRACER 244#ifdef CONFIG_FUNCTION_GRAPH_TRACER
245static void update_function_graph_func(void); 245static void update_function_graph_func(void);
246
247/* Both enabled by default (can be cleared by function_graph tracer flags */
248static bool fgraph_sleep_time = true;
249static bool fgraph_graph_time = true;
250
246#else 251#else
247static inline void update_function_graph_func(void) { } 252static inline void update_function_graph_func(void) { }
248#endif 253#endif
@@ -917,7 +922,7 @@ static void profile_graph_return(struct ftrace_graph_ret *trace)
917 922
918 calltime = trace->rettime - trace->calltime; 923 calltime = trace->rettime - trace->calltime;
919 924
920 if (!(trace_flags & TRACE_ITER_GRAPH_TIME)) { 925 if (!fgraph_graph_time) {
921 int index; 926 int index;
922 927
923 index = trace->depth; 928 index = trace->depth;
@@ -5639,6 +5644,16 @@ static struct ftrace_ops graph_ops = {
5639 ASSIGN_OPS_HASH(graph_ops, &global_ops.local_hash) 5644 ASSIGN_OPS_HASH(graph_ops, &global_ops.local_hash)
5640}; 5645};
5641 5646
5647void ftrace_graph_sleep_time_control(bool enable)
5648{
5649 fgraph_sleep_time = enable;
5650}
5651
5652void ftrace_graph_graph_time_control(bool enable)
5653{
5654 fgraph_graph_time = enable;
5655}
5656
5642int ftrace_graph_entry_stub(struct ftrace_graph_ent *trace) 5657int ftrace_graph_entry_stub(struct ftrace_graph_ent *trace)
5643{ 5658{
5644 return 0; 5659 return 0;
@@ -5707,7 +5722,7 @@ ftrace_graph_probe_sched_switch(void *ignore,
5707 * Does the user want to count the time a function was asleep. 5722 * Does the user want to count the time a function was asleep.
5708 * If so, do not update the time stamps. 5723 * If so, do not update the time stamps.
5709 */ 5724 */
5710 if (trace_flags & TRACE_ITER_SLEEP_TIME) 5725 if (fgraph_sleep_time)
5711 return; 5726 return;
5712 5727
5713 timestamp = trace_clock_local(); 5728 timestamp = trace_clock_local();
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index d98789b112c6..e26933c2edaa 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -492,7 +492,7 @@ static inline void ftrace_trace_stack(struct ring_buffer *buffer,
492 492
493/* trace_flags holds trace_options default values */ 493/* trace_flags holds trace_options default values */
494unsigned long trace_flags = 494unsigned long trace_flags =
495 FUNCTION_DEFAULT_FLAGS | FUNCTION_GRAPH_DEFAULT_FLAGS | 495 FUNCTION_DEFAULT_FLAGS |
496 TRACE_ITER_PRINT_PARENT | TRACE_ITER_PRINTK | 496 TRACE_ITER_PRINT_PARENT | TRACE_ITER_PRINTK |
497 TRACE_ITER_ANNOTATE | TRACE_ITER_CONTEXT_INFO | 497 TRACE_ITER_ANNOTATE | TRACE_ITER_CONTEXT_INFO |
498 TRACE_ITER_RECORD_CMD | TRACE_ITER_OVERWRITE | 498 TRACE_ITER_RECORD_CMD | TRACE_ITER_OVERWRITE |
diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
index 33d1e5384481..5219bf5f708a 100644
--- a/kernel/trace/trace.h
+++ b/kernel/trace/trace.h
@@ -714,9 +714,14 @@ extern char trace_find_mark(unsigned long long duration);
714#define TRACE_GRAPH_PRINT_ABS_TIME 0x20 714#define TRACE_GRAPH_PRINT_ABS_TIME 0x20
715#define TRACE_GRAPH_PRINT_IRQS 0x40 715#define TRACE_GRAPH_PRINT_IRQS 0x40
716#define TRACE_GRAPH_PRINT_TAIL 0x80 716#define TRACE_GRAPH_PRINT_TAIL 0x80
717#define TRACE_GRAPH_SLEEP_TIME 0x100
718#define TRACE_GRAPH_GRAPH_TIME 0x200
717#define TRACE_GRAPH_PRINT_FILL_SHIFT 28 719#define TRACE_GRAPH_PRINT_FILL_SHIFT 28
718#define TRACE_GRAPH_PRINT_FILL_MASK (0x3 << TRACE_GRAPH_PRINT_FILL_SHIFT) 720#define TRACE_GRAPH_PRINT_FILL_MASK (0x3 << TRACE_GRAPH_PRINT_FILL_SHIFT)
719 721
722extern void ftrace_graph_sleep_time_control(bool enable);
723extern void ftrace_graph_graph_time_control(bool enable);
724
720extern enum print_line_t 725extern enum print_line_t
721print_graph_function_flags(struct trace_iterator *iter, u32 flags); 726print_graph_function_flags(struct trace_iterator *iter, u32 flags);
722extern void print_graph_headers_flags(struct seq_file *s, u32 flags); 727extern void print_graph_headers_flags(struct seq_file *s, u32 flags);
@@ -892,15 +897,9 @@ extern int trace_get_user(struct trace_parser *parser, const char __user *ubuf,
892 */ 897 */
893#ifdef CONFIG_FUNCTION_GRAPH_TRACER 898#ifdef CONFIG_FUNCTION_GRAPH_TRACER
894# define FGRAPH_FLAGS \ 899# define FGRAPH_FLAGS \
895 C(SLEEP_TIME, "sleep-time"), \
896 C(GRAPH_TIME, "graph-time"), \
897 C(DISPLAY_GRAPH, "display-graph"), 900 C(DISPLAY_GRAPH, "display-graph"),
898/* Initially set for trace_flags */
899# define FUNCTION_GRAPH_DEFAULT_FLAGS \
900 (TRACE_ITER_SLEEP_TIME | TRACE_ITER_GRAPH_TIME)
901#else 901#else
902# define FGRAPH_FLAGS 902# define FGRAPH_FLAGS
903# define FUNCTION_GRAPH_DEFAULT_FLAGS 0UL
904#endif 903#endif
905 904
906#ifdef CONFIG_BRANCH_TRACER 905#ifdef CONFIG_BRANCH_TRACER
diff --git a/kernel/trace/trace_functions_graph.c b/kernel/trace/trace_functions_graph.c
index ca98445782ac..86e45c2658e4 100644
--- a/kernel/trace/trace_functions_graph.c
+++ b/kernel/trace/trace_functions_graph.c
@@ -83,13 +83,18 @@ static struct tracer_opt trace_opts[] = {
83 { TRACER_OPT(funcgraph-irqs, TRACE_GRAPH_PRINT_IRQS) }, 83 { TRACER_OPT(funcgraph-irqs, TRACE_GRAPH_PRINT_IRQS) },
84 /* Display function name after trailing } */ 84 /* Display function name after trailing } */
85 { TRACER_OPT(funcgraph-tail, TRACE_GRAPH_PRINT_TAIL) }, 85 { TRACER_OPT(funcgraph-tail, TRACE_GRAPH_PRINT_TAIL) },
86 /* Include sleep time (scheduled out) between entry and return */
87 { TRACER_OPT(sleep-time, TRACE_GRAPH_SLEEP_TIME) },
88 /* Include time within nested functions */
89 { TRACER_OPT(graph-time, TRACE_GRAPH_GRAPH_TIME) },
86 { } /* Empty entry */ 90 { } /* Empty entry */
87}; 91};
88 92
89static struct tracer_flags tracer_flags = { 93static struct tracer_flags tracer_flags = {
90 /* Don't display overruns, proc, or tail by default */ 94 /* Don't display overruns, proc, or tail by default */
91 .val = TRACE_GRAPH_PRINT_CPU | TRACE_GRAPH_PRINT_OVERHEAD | 95 .val = TRACE_GRAPH_PRINT_CPU | TRACE_GRAPH_PRINT_OVERHEAD |
92 TRACE_GRAPH_PRINT_DURATION | TRACE_GRAPH_PRINT_IRQS, 96 TRACE_GRAPH_PRINT_DURATION | TRACE_GRAPH_PRINT_IRQS |
97 TRACE_GRAPH_SLEEP_TIME | TRACE_GRAPH_GRAPH_TIME,
93 .opts = trace_opts 98 .opts = trace_opts
94}; 99};
95 100
@@ -1362,6 +1367,12 @@ func_graph_set_flag(struct trace_array *tr, u32 old_flags, u32 bit, int set)
1362 if (bit == TRACE_GRAPH_PRINT_IRQS) 1367 if (bit == TRACE_GRAPH_PRINT_IRQS)
1363 ftrace_graph_skip_irqs = !set; 1368 ftrace_graph_skip_irqs = !set;
1364 1369
1370 if (bit == TRACE_GRAPH_SLEEP_TIME)
1371 ftrace_graph_sleep_time_control(set);
1372
1373 if (bit == TRACE_GRAPH_GRAPH_TIME)
1374 ftrace_graph_graph_time_control(set);
1375
1365 return 0; 1376 return 0;
1366} 1377}
1367 1378