Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751732AbdFICyA (ORCPT ); Thu, 8 Jun 2017 22:54:00 -0400 Received: from mail-pg0-f48.google.com ([74.125.83.48]:34779 "EHLO mail-pg0-f48.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751712AbdFICx6 (ORCPT ); Thu, 8 Jun 2017 22:53:58 -0400 From: Joel Fernandes To: linux-kernel@vger.kernel.org Cc: mikesart@gmail.com, Joel Fernandes , kernel-team@android.com, Steven Rostedt , Ingo Molnar Subject: [PATCH RFC v3 4/4] tracing/ftrace: Add support to record and display tgid Date: Thu, 8 Jun 2017 19:53:27 -0700 Message-Id: <20170609025327.9508-5-joelaf@google.com> X-Mailer: git-send-email 2.13.0.506.g27d5fe0cd-goog In-Reply-To: <20170609025327.9508-1-joelaf@google.com> References: <20170609025327.9508-1-joelaf@google.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2190 Lines: 78 Make function tracer able to record tgid if/when record-tgid is enabled. Cc: kernel-team@android.com Cc: Steven Rostedt Cc: Ingo Molnar Tested-by: Michael Sartain Signed-off-by: Joel Fernandes --- kernel/trace/trace_functions.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/kernel/trace/trace_functions.c b/kernel/trace/trace_functions.c index a3bddbfd0874..d6bdc38ab273 100644 --- a/kernel/trace/trace_functions.c +++ b/kernel/trace/trace_functions.c @@ -27,6 +27,7 @@ static void function_stack_trace_call(unsigned long ip, unsigned long parent_ip, struct ftrace_ops *op, struct pt_regs *pt_regs); static struct tracer_flags func_flags; +static bool tgid_recorded; /* Our option */ enum { @@ -104,6 +105,11 @@ static int function_trace_init(struct trace_array *tr) put_cpu(); tracing_start_cmdline_record(); + + if (tr->trace_flags & TRACE_ITER_RECORD_TGID) { + tgid_recorded = true; + tracing_start_tgid_record(); + } tracing_start_function_trace(tr); return 0; } @@ -112,6 +118,10 @@ static void function_trace_reset(struct trace_array *tr) { tracing_stop_function_trace(tr); tracing_stop_cmdline_record(); + if (tgid_recorded) { + tracing_stop_tgid_record(); + tgid_recorded = false; + } ftrace_reset_array_ops(tr); } @@ -252,6 +262,21 @@ func_set_flag(struct trace_array *tr, u32 old_flags, u32 bit, int set) return 0; } +static int +func_tracer_flag_changed(struct trace_array *tr, unsigned int mask, + int enabled) +{ + if (mask == TRACE_ITER_RECORD_TGID) { + tgid_recorded = !!enabled; + if (enabled) + tracing_start_tgid_record(); + else + tracing_stop_tgid_record(); + } + + return 0; +} + static struct tracer function_trace __tracer_data = { .name = "function", @@ -260,6 +285,7 @@ static struct tracer function_trace __tracer_data = .start = function_trace_start, .flags = &func_flags, .set_flag = func_set_flag, + .flag_changed = func_tracer_flag_changed, .allow_instances = true, #ifdef CONFIG_FTRACE_SELFTEST .selftest = trace_selftest_startup_function, -- 2.13.0.506.g27d5fe0cd-goog