From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754546AbeAQQg5 (ORCPT ); Wed, 17 Jan 2018 11:36:57 -0500 Received: from terminus.zytor.com ([65.50.211.136]:58747 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754241AbeAQQgx (ORCPT ); Wed, 17 Jan 2018 11:36:53 -0500 Date: Wed, 17 Jan 2018 08:34:35 -0800 From: tip-bot for Arnaldo Carvalho de Melo Message-ID: Cc: tmricht@linux.vnet.ibm.com, wangnan0@huawei.com, jolsa@kernel.org, hpa@zytor.com, mingo@kernel.org, brueckner@linux.vnet.ibm.com, adrian.hunter@intel.com, tglx@linutronix.de, acme@redhat.com, noelgrandin@gmail.com, linux-kernel@vger.kernel.org, dsahern@gmail.com, namhyung@kernel.org Reply-To: adrian.hunter@intel.com, mingo@kernel.org, brueckner@linux.vnet.ibm.com, hpa@zytor.com, wangnan0@huawei.com, jolsa@kernel.org, tmricht@linux.vnet.ibm.com, dsahern@gmail.com, linux-kernel@vger.kernel.org, namhyung@kernel.org, tglx@linutronix.de, noelgrandin@gmail.com, acme@redhat.com To: linux-tip-commits@vger.kernel.org Subject: [tip:perf/core] perf callchains: Ask for PERF_RECORD_MMAP for data mmaps for DWARF unwinding Git-Commit-ID: 0d3dcc0ef13d9d78132d7d6ae068c17ed858e65e X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit-ID: 0d3dcc0ef13d9d78132d7d6ae068c17ed858e65e Gitweb: https://git.kernel.org/tip/0d3dcc0ef13d9d78132d7d6ae068c17ed858e65e Author: Arnaldo Carvalho de Melo AuthorDate: Tue, 16 Jan 2018 11:16:25 -0300 Committer: Arnaldo Carvalho de Melo CommitDate: Wed, 17 Jan 2018 10:23:33 -0300 perf callchains: Ask for PERF_RECORD_MMAP for data mmaps for DWARF unwinding When we use a global DWARF setting as in: perf record --call-graph dwarf According to 5c0cf22477ea ("perf record: Store data mmaps for dwarf unwind") we need to set up some extra perf_event_attr bits. But when we instead do a per event dwarf setting: perf record -e cycles/call-graph=dwarf/ This was not being done, make them equivalent. This didn't produce any output changes in my tests while fixing up loose ends in the per-event settings, I found it just by comparing the perf_event_attr fields trying to find an explanation for those problems. Cc: Adrian Hunter Cc: David Ahern Cc: Hendrick Brueckner Cc: Jiri Olsa Cc: Namhyung Kim Cc: Noel Grandin Cc: Thomas Richter Cc: Wang Nan Link: https://lkml.kernel.org/n/tip-6476r53h2o38skbs9qa4ust4@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/util/evsel.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c index 8f971a2..85eb84d 100644 --- a/tools/perf/util/evsel.c +++ b/tools/perf/util/evsel.c @@ -726,7 +726,7 @@ perf_evsel__reset_callgraph(struct perf_evsel *evsel, } static void apply_config_terms(struct perf_evsel *evsel, - struct record_opts *opts) + struct record_opts *opts, bool track) { struct perf_evsel_config_term *term; struct list_head *config_terms = &evsel->config_terms; @@ -797,6 +797,8 @@ static void apply_config_terms(struct perf_evsel *evsel, /* User explicitly set per-event callgraph, clear the old setting and reset. */ if ((callgraph_buf != NULL) || (dump_size > 0) || max_stack) { + bool sample_address = false; + if (max_stack) { param.max_stack = max_stack; if (callgraph_buf == NULL) @@ -816,6 +818,8 @@ static void apply_config_terms(struct perf_evsel *evsel, evsel->name); return; } + if (param.record_mode == CALLCHAIN_DWARF) + sample_address = true; } } if (dump_size > 0) { @@ -828,8 +832,14 @@ static void apply_config_terms(struct perf_evsel *evsel, perf_evsel__reset_callgraph(evsel, &callchain_param); /* set perf-event callgraph */ - if (param.enabled) + if (param.enabled) { + if (sample_address) { + perf_evsel__set_sample_bit(evsel, ADDR); + perf_evsel__set_sample_bit(evsel, DATA_SRC); + evsel->attr.mmap_data = track; + } perf_evsel__config_callchain(evsel, opts, ¶m); + } } } @@ -1060,7 +1070,7 @@ void perf_evsel__config(struct perf_evsel *evsel, struct record_opts *opts, * Apply event specific term settings, * it overloads any global configuration. */ - apply_config_terms(evsel, opts); + apply_config_terms(evsel, opts, track); evsel->ignore_missing_thread = opts->ignore_missing_thread; }