From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933323AbbJAL4z (ORCPT ); Thu, 1 Oct 2015 07:56:55 -0400 Received: from mail.kernel.org ([198.145.29.136]:52088 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933132AbbJAL4n (ORCPT ); Thu, 1 Oct 2015 07:56:43 -0400 Message-Id: <20151001115638.141195795@goodmis.org> User-Agent: quilt/0.61-1 Date: Thu, 01 Oct 2015 07:55:37 -0400 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Ingo Molnar , Andrew Morton Subject: [for-next][PATCH 13/25] tracing: Only create function graph options when it is compiled in References: <20151001115524.066462793@goodmis.org> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-15 Content-Disposition: inline; filename=0013-tracing-Only-create-function-graph-options-when-it-i.patch Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: "Steven Rostedt (Red Hat)" Do not create fuction graph tracer options when function graph tracer is not even compiled in. Signed-off-by: Steven Rostedt --- kernel/trace/trace.c | 11 +++++++---- kernel/trace/trace.h | 20 +++++++++++++++++--- kernel/trace/trace_irqsoff.c | 6 ++++-- kernel/trace/trace_sched_wakeup.c | 6 ++++-- 4 files changed, 32 insertions(+), 11 deletions(-) diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index e80e380d0238..68fcb40fc764 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -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) { diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h index d164845edddd..33cd09799ceb 100644 --- a/kernel/trace/trace.h +++ b/kernel/trace/trace.h @@ -880,6 +880,22 @@ 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. * @@ -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 diff --git a/kernel/trace/trace_irqsoff.c b/kernel/trace/trace_irqsoff.c index 446480a86123..bd9cd0e2c13c 100644 --- a/kernel/trace/trace_irqsoff.c +++ b/kernel/trace/trace_irqsoff.c @@ -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 /* @@ -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); } diff --git a/kernel/trace/trace_sched_wakeup.c b/kernel/trace/trace_sched_wakeup.c index f5d2e65e7c92..a6c350c681cc 100644 --- a/kernel/trace/trace_sched_wakeup.c +++ b/kernel/trace/trace_sched_wakeup.c @@ -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 @@ -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); } -- 2.5.1