Skip to content

Commit

Permalink
tracing: Only create function graph options when it is compiled in
Browse files Browse the repository at this point in the history
Do not create fuction graph tracer options when function graph tracer is not
even compiled in.

Signed-off-by: Steven Rostedt <[email protected]>
  • Loading branch information
rostedt committed Sep 29, 2015
1 parent a3418a3 commit 729358d
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 11 deletions.
11 changes: 7 additions & 4 deletions kernel/trace/trace.c
Original file line number Diff line number Diff line change
Expand Up @@ -489,10 +489,13 @@ static inline void ftrace_trace_stack(struct ring_buffer *buffer,
#endif

/* trace_flags holds trace_options default values */
unsigned long trace_flags = TRACE_ITER_PRINT_PARENT | TRACE_ITER_PRINTK |
TRACE_ITER_ANNOTATE | TRACE_ITER_CONTEXT_INFO | TRACE_ITER_SLEEP_TIME |
TRACE_ITER_GRAPH_TIME | TRACE_ITER_RECORD_CMD | TRACE_ITER_OVERWRITE |
TRACE_ITER_IRQ_INFO | TRACE_ITER_MARKERS | TRACE_ITER_FUNCTION;
unsigned long trace_flags =
FUNCTION_GRAPH_DEFAULT_FLAGS |
TRACE_ITER_PRINT_PARENT | TRACE_ITER_PRINTK |
TRACE_ITER_ANNOTATE | TRACE_ITER_CONTEXT_INFO |
TRACE_ITER_RECORD_CMD | TRACE_ITER_OVERWRITE |
TRACE_ITER_IRQ_INFO | TRACE_ITER_MARKERS | TRACE_ITER_FUNCTION
;

static void tracer_tracing_on(struct trace_array *tr)
{
Expand Down
20 changes: 17 additions & 3 deletions kernel/trace/trace.h
Original file line number Diff line number Diff line change
Expand Up @@ -879,6 +879,22 @@ extern void trace_parser_put(struct trace_parser *parser);
extern int trace_get_user(struct trace_parser *parser, const char __user *ubuf,
size_t cnt, loff_t *ppos);

/*
* Only create function graph options if function graph is configured.
*/
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
# define FGRAPH_FLAGS \
C(SLEEP_TIME, "sleep-time"), \
C(GRAPH_TIME, "graph-time"), \
C(DISPLAY_GRAPH, "display-graph"),
/* Initially set for trace_flags */
# define FUNCTION_GRAPH_DEFAULT_FLAGS \
(TRACE_ITER_SLEEP_TIME | TRACE_ITER_GRAPH_TIME)
#else
# define FGRAPH_FLAGS
# define FUNCTION_GRAPH_DEFAULT_FLAGS 0UL
#endif

/*
* trace_iterator_flags is an enumeration that defines bit
* positions into trace_flags that controls the output.
Expand All @@ -904,15 +920,13 @@ extern int trace_get_user(struct trace_parser *parser, const char __user *ubuf,
C(PRINTK_MSGONLY, "printk-msg-only"), \
C(CONTEXT_INFO, "context-info"), /* Print pid/cpu/time */ \
C(LATENCY_FMT, "latency-format"), \
C(SLEEP_TIME, "sleep-time"), \
C(GRAPH_TIME, "graph-time"), \
C(RECORD_CMD, "record-cmd"), \
C(OVERWRITE, "overwrite"), \
C(STOP_ON_FREE, "disable_on_free"), \
C(IRQ_INFO, "irq-info"), \
C(MARKERS, "markers"), \
C(FUNCTION, "function-trace"), \
C(DISPLAY_GRAPH, "display-graph"),
FGRAPH_FLAGS

/*
* By defining C, we can make TRACE_FLAGS a list of bit names
Expand Down
6 changes: 4 additions & 2 deletions kernel/trace/trace_irqsoff.c
Original file line number Diff line number Diff line change
Expand Up @@ -57,15 +57,15 @@ irq_trace(void)
# define irq_trace() (0)
#endif

#define is_graph() (trace_flags & TRACE_ITER_DISPLAY_GRAPH)

#ifdef CONFIG_FUNCTION_GRAPH_TRACER
static int irqsoff_display_graph(struct trace_array *tr, int set);
# define is_graph() (trace_flags & TRACE_ITER_DISPLAY_GRAPH)
#else
static inline int irqsoff_display_graph(struct trace_array *tr, int set)
{
return -EINVAL;
}
# define is_graph() false
#endif

/*
Expand Down Expand Up @@ -556,8 +556,10 @@ static int irqsoff_flag_changed(struct trace_array *tr, u32 mask, int set)
if (mask & TRACE_ITER_FUNCTION)
return irqsoff_function_set(tr, set);

#ifdef CONFIG_FUNCTION_GRAPH_TRACER
if (mask & TRACE_ITER_DISPLAY_GRAPH)
return irqsoff_display_graph(tr, set);
#endif

return trace_keep_overwrite(tracer, mask, set);
}
Expand Down
6 changes: 4 additions & 2 deletions kernel/trace/trace_sched_wakeup.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,15 +40,15 @@ static void wakeup_graph_return(struct ftrace_graph_ret *trace);
static int save_flags;
static bool function_enabled;

#define is_graph() (trace_flags & TRACE_ITER_DISPLAY_GRAPH)

#ifdef CONFIG_FUNCTION_GRAPH_TRACER
static int wakeup_display_graph(struct trace_array *tr, int set);
# define is_graph() (trace_flags & TRACE_ITER_DISPLAY_GRAPH)
#else
static inline int wakeup_display_graph(struct trace_array *tr, int set)
{
return -EINVAL;
}
# define is_graph() false
#endif


Expand Down Expand Up @@ -174,8 +174,10 @@ static int wakeup_flag_changed(struct trace_array *tr, u32 mask, int set)
if (mask & TRACE_ITER_FUNCTION)
return wakeup_function_set(tr, set);

#ifdef CONFIG_FUNCTION_GRAPH_TRACER
if (mask & TRACE_ITER_DISPLAY_GRAPH)
return wakeup_display_graph(tr, set);
#endif

return trace_keep_overwrite(tracer, mask, set);
}
Expand Down

0 comments on commit 729358d

Please sign in to comment.