Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752783AbcDOWdg (ORCPT ); Fri, 15 Apr 2016 18:33:36 -0400 Received: from mail-ig0-f182.google.com ([209.85.213.182]:35239 "EHLO mail-ig0-f182.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752631AbcDOWdS (ORCPT ); Fri, 15 Apr 2016 18:33:18 -0400 From: Howard Cochran To: linux-kernel@vger.kernel.org Cc: Steven Rostedt , Ingo Molnar , Howard Cochran , Howard Cochran Subject: [PATCH v2 3/5] tracing: Make traceon, traceoff trigger affect the correct instance Date: Fri, 15 Apr 2016 18:32:13 -0400 Message-Id: <1460759535-22403-4-git-send-email-hcochran@kernelspring.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1460759535-22403-1-git-send-email-hcochran@kernelspring.com> References: <1460759535-22403-1-git-send-email-hcochran@kernelspring.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3740 Lines: 122 Currently, the traceon & traceoff triggers always enable or disable tracing in the top level buffer, even if it was triggered within an instance. Fixed by using the trace_array associated with the trace_event_file which fired the trigger. Signed-off-by: Howard Cochran --- kernel/trace/trace.c | 6 +++--- kernel/trace/trace.h | 3 +++ kernel/trace/trace_events_trigger.c | 16 ++++++++-------- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 5541517..c78fe42 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -498,7 +498,7 @@ static inline void ftrace_trace_stack(struct trace_array *tr, #endif -static void tracer_tracing_on(struct trace_array *tr) +void tracer_tracing_on(struct trace_array *tr) { if (tr->trace_buffer.buffer) ring_buffer_record_on(tr->trace_buffer.buffer); @@ -764,7 +764,7 @@ void tracing_snapshot_alloc(void) EXPORT_SYMBOL_GPL(tracing_snapshot_alloc); #endif /* CONFIG_TRACER_SNAPSHOT */ -static void tracer_tracing_off(struct trace_array *tr) +void tracer_tracing_off(struct trace_array *tr) { if (tr->trace_buffer.buffer) ring_buffer_record_off(tr->trace_buffer.buffer); @@ -807,7 +807,7 @@ void disable_trace_on_warning(void) * * Shows real state of the ring buffer if it is enabled or not. */ -static int tracer_tracing_is_on(struct trace_array *tr) +int tracer_tracing_is_on(struct trace_array *tr) { if (tr->trace_buffer.buffer) return ring_buffer_record_is_on(tr->trace_buffer.buffer); diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h index 00a5419..d3bc0e8 100644 --- a/kernel/trace/trace.h +++ b/kernel/trace/trace.h @@ -717,6 +717,9 @@ enum print_line_t print_trace_line(struct trace_iterator *iter); extern char trace_find_mark(unsigned long long duration); void __trace_dump_stack(int skip, struct trace_array *tr); +int tracer_tracing_is_on(struct trace_array *tr); +void tracer_tracing_on(struct trace_array *tr); +void tracer_tracing_off(struct trace_array *tr); /* Standard output formatting function used for function return traces */ #ifdef CONFIG_FUNCTION_GRAPH_TRACER diff --git a/kernel/trace/trace_events_trigger.c b/kernel/trace/trace_events_trigger.c index 670aa05..3595688 100644 --- a/kernel/trace/trace_events_trigger.c +++ b/kernel/trace/trace_events_trigger.c @@ -768,17 +768,17 @@ static void traceon_trigger(struct event_trigger_data *data, void *rec, struct trace_event_file *file) { - if (tracing_is_on()) + if (tracer_tracing_is_on(file->tr)) return; - tracing_on(); + tracer_tracing_on(file->tr); } static void traceon_count_trigger(struct event_trigger_data *data, void *rec, struct trace_event_file *file) { - if (tracing_is_on()) + if (tracer_tracing_is_on(file->tr)) return; if (!data->count) @@ -787,24 +787,24 @@ traceon_count_trigger(struct event_trigger_data *data, void *rec, if (data->count != -1) (data->count)--; - tracing_on(); + tracer_tracing_on(file->tr); } static void traceoff_trigger(struct event_trigger_data *data, void *rec, struct trace_event_file *file) { - if (!tracing_is_on()) + if (!tracer_tracing_is_on(file->tr)) return; - tracing_off(); + tracer_tracing_off(file->tr); } static void traceoff_count_trigger(struct event_trigger_data *data, void *rec, struct trace_event_file *file) { - if (!tracing_is_on()) + if (!tracer_tracing_is_on(file->tr)) return; if (!data->count) @@ -813,7 +813,7 @@ traceoff_count_trigger(struct event_trigger_data *data, void *rec, if (data->count != -1) (data->count)--; - tracing_off(); + tracer_tracing_off(file->tr); } static int -- 1.9.1