From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Ingo Molnar <mingo@kernel.org>
Cc: linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org,
Arnaldo Carvalho de Melo <acme@redhat.com>,
Adrian Hunter <adrian.hunter@intel.com>,
David Ahern <dsahern@gmail.com>, Jiri Olsa <jolsa@kernel.org>,
Namhyung Kim <namhyung@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com>,
Wang Nan <wangnan0@huawei.com>,
yuzhoujian <yuzhoujian@didichuxing.com>
Subject: [PATCH 06/30] perf script: Fix --per-event-dump for auxtrace synth evsels
Date: Tue, 28 Nov 2017 12:01:56 -0300 [thread overview]
Message-ID: <20171128150220.5064-7-acme@kernel.org> (raw)
In-Reply-To: <20171128150220.5064-1-acme@kernel.org>
From: Arnaldo Carvalho de Melo <acme@redhat.com>
When processing PERF_RECORD_AUXTRACE_INFO several perf_evsel entries
will be synthesized and inserted into session->evlist, eventually ending
in perf_script.tool.sample(), which ends up calling builtin-script.c's
process_event(), that expects evsel->priv to be a perf_evsel_script
object with a valid FILE pointer in fp.
So we need to intercept the processing of PERF_RECORD_AUXTRACE_INFO and
then setup evsel->priv for these newly created perf_evsel instances, do
it to fix the segfault in process_event() trying to use a NULL for that
FILE pointer.
Reported-by: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com>
Cc: Wang Nan <wangnan0@huawei.com>
Cc: yuzhoujian <yuzhoujian@didichuxing.com>
Fixes: a14390fde64e ("perf script: Allow creating per-event dump files")
Link: http://lkml.kernel.org/n/tip-bthnur8r8de01gxvn2qayx6e@git.kernel.org
[ Merge fix by Ravi Bangoria before pushing upstream to preserv bisectability ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/builtin-script.c | 31 ++++++++++++++++++++++++++++++-
1 file changed, 30 insertions(+), 1 deletion(-)
diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c
index 68f36dc0344f..9b43bda45a41 100644
--- a/tools/perf/builtin-script.c
+++ b/tools/perf/builtin-script.c
@@ -1955,6 +1955,16 @@ static int perf_script__fopen_per_event_dump(struct perf_script *script)
struct perf_evsel *evsel;
evlist__for_each_entry(script->session->evlist, evsel) {
+ /*
+ * Already setup? I.e. we may be called twice in cases like
+ * Intel PT, one for the intel_pt// and dummy events, then
+ * for the evsels syntheized from the auxtrace info.
+ *
+ * Ses perf_script__process_auxtrace_info.
+ */
+ if (evsel->priv != NULL)
+ continue;
+
evsel->priv = perf_evsel_script__new(evsel, script->session->data);
if (evsel->priv == NULL)
goto out_err_fclose;
@@ -2838,6 +2848,25 @@ int process_cpu_map_event(struct perf_tool *tool __maybe_unused,
return set_maps(script);
}
+#ifdef HAVE_AUXTRACE_SUPPORT
+static int perf_script__process_auxtrace_info(struct perf_tool *tool,
+ union perf_event *event,
+ struct perf_session *session)
+{
+ int ret = perf_event__process_auxtrace_info(tool, event, session);
+
+ if (ret == 0) {
+ struct perf_script *script = container_of(tool, struct perf_script, tool);
+
+ ret = perf_script__setup_per_event_dump(script);
+ }
+
+ return ret;
+}
+#else
+#define perf_script__process_auxtrace_info 0
+#endif
+
int cmd_script(int argc, const char **argv)
{
bool show_full_info = false;
@@ -2866,7 +2895,7 @@ int cmd_script(int argc, const char **argv)
.feature = perf_event__process_feature,
.build_id = perf_event__process_build_id,
.id_index = perf_event__process_id_index,
- .auxtrace_info = perf_event__process_auxtrace_info,
+ .auxtrace_info = perf_script__process_auxtrace_info,
.auxtrace = perf_event__process_auxtrace,
.auxtrace_error = perf_event__process_auxtrace_error,
.stat = perf_event__process_stat_event,
--
2.13.6
next prev parent reply other threads:[~2017-11-28 15:01 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-11-28 15:01 [GIT PULL 00/30] perf/urgent fixes Arnaldo Carvalho de Melo
2017-11-28 15:01 ` [PATCH 01/30] perf evlist: Set the correct idx when adding dummy events Arnaldo Carvalho de Melo
2017-11-28 15:01 ` [PATCH 02/30] perf record: Generate PERF_RECORD_{MMAP,COMM,EXEC} with --delay Arnaldo Carvalho de Melo
2017-11-28 15:01 ` [PATCH 03/30] perf record: Fix -c/-F options for cpu event aliases Arnaldo Carvalho de Melo
2017-11-28 15:01 ` [PATCH 04/30] perf trace: Fix an exit code of trace__symbols_init Arnaldo Carvalho de Melo
2017-11-28 15:01 ` [PATCH 05/30] perf evsel: Fix up leftover perf_evsel_stat usage via evsel->priv Arnaldo Carvalho de Melo
2017-11-28 15:01 ` Arnaldo Carvalho de Melo [this message]
2017-11-28 15:01 ` [PATCH 07/30] perf machine: Guard against NULL in machine__exit() Arnaldo Carvalho de Melo
2017-11-28 15:01 ` [PATCH 08/30] perf help: Fix a bug during strstart() conversion Arnaldo Carvalho de Melo
2017-11-28 15:01 ` [PATCH 09/30] perf annotate: Do not truncate instruction names at 6 chars Arnaldo Carvalho de Melo
2017-11-28 15:02 ` [PATCH 10/30] perf test shell: Fix check open filename arg using 'perf trace' on s390x Arnaldo Carvalho de Melo
2017-11-28 15:02 ` [PATCH 11/30] perf test shell: Fix test case probe libc's inet_pton " Arnaldo Carvalho de Melo
2017-11-28 15:02 ` [PATCH 12/30] perf evlist: Add helper to check if attr.exclude_kernel is set in all evsels Arnaldo Carvalho de Melo
2017-11-28 15:02 ` [PATCH 13/30] perf report: Ignore kptr_restrict when not sampling the kernel Arnaldo Carvalho de Melo
2017-11-28 15:02 ` [PATCH 14/30] perf record: " Arnaldo Carvalho de Melo
2017-11-28 15:02 ` [PATCH 15/30] perf top: " Arnaldo Carvalho de Melo
2017-11-28 15:02 ` [PATCH 16/30] perf: Fix header.size for namespace events Arnaldo Carvalho de Melo
2017-11-28 15:02 ` [PATCH 17/30] perf top: Fix window dimensions change handling Arnaldo Carvalho de Melo
2017-11-28 15:02 ` [PATCH 18/30] perf top: Use signal interface for SIGWINCH handler Arnaldo Carvalho de Melo
2017-11-28 15:02 ` [PATCH 19/30] perf bench numa: Fixup discontiguous/sparse numa nodes Arnaldo Carvalho de Melo
2017-11-28 15:02 ` [PATCH 20/30] perf test: Fix test 21 for s390x Arnaldo Carvalho de Melo
2017-11-28 15:02 ` [PATCH 21/30] perf intel-pt: Bring instruction decoder files into line with the kernel Arnaldo Carvalho de Melo
2017-11-28 15:02 ` [PATCH 22/30] tools/headers: Synchronize kernel x86 UAPI headers Arnaldo Carvalho de Melo
2017-11-28 15:02 ` [PATCH 23/30] tools headers: Synchronize kernel ABI headers wrt SPDX tags Arnaldo Carvalho de Melo
2017-11-28 15:02 ` [PATCH 24/30] tools headers: Synchronize perf_event.h header Arnaldo Carvalho de Melo
2017-11-28 15:02 ` [PATCH 25/30] tools headers uapi: Synchronize drm/drm.h Arnaldo Carvalho de Melo
2017-11-28 15:02 ` [PATCH 26/30] tools headers: Synchronize drm/i915_drm.h Arnaldo Carvalho de Melo
2017-11-28 15:02 ` [PATCH 27/30] tools headers: Synchronize KVM arch ABI headers Arnaldo Carvalho de Melo
2017-11-28 15:02 ` [PATCH 28/30] tools headers: Synchronize prctl.h ABI header Arnaldo Carvalho de Melo
2017-11-28 15:02 ` [PATCH 29/30] tools headers: Syncronize mman.h " Arnaldo Carvalho de Melo
2017-11-28 15:02 ` [PATCH 30/30] perf tools s390: Do not include header files from the kernel sources Arnaldo Carvalho de Melo
2017-11-28 16:20 ` [GIT PULL 00/30] perf/urgent fixes Ingo Molnar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20171128150220.5064-7-acme@kernel.org \
--to=acme@kernel.org \
--cc=acme@redhat.com \
--cc=adrian.hunter@intel.com \
--cc=dsahern@gmail.com \
--cc=jolsa@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
--cc=ravi.bangoria@linux.vnet.ibm.com \
--cc=wangnan0@huawei.com \
--cc=yuzhoujian@didichuxing.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).