perf record: Synthesize features before events in pipe mode
authorJiri Olsa <jolsa@kernel.org>
Wed, 14 Mar 2018 09:22:04 +0000 (10:22 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 29 Dec 2018 12:39:08 +0000 (13:39 +0100)
[ Upstream commit a2015516c5c0be932a69e1d3405c2fb03b4eacf1 ]

We need to synthesize events first, because some features works on top
of them (on report side).

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Tested-by: Stephane Eranian <eranian@google.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/20180314092205.23291-1-jolsa@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
tools/perf/builtin-record.c

index b205c13404567404be68b4f7182d5db3c4741581..5e53cafe6cf9e2c00d01a5de4a6c46a3f31c200d 100644 (file)
@@ -800,13 +800,10 @@ static int record__synthesize(struct record *rec, bool tail)
                return 0;
 
        if (file->is_pipe) {
-               err = perf_event__synthesize_features(
-                       tool, session, rec->evlist, process_synthesized_event);
-               if (err < 0) {
-                       pr_err("Couldn't synthesize features.\n");
-                       return err;
-               }
-
+               /*
+                * We need to synthesize events first, because some
+                * features works on top of them (on report side).
+                */
                err = perf_event__synthesize_attrs(tool, session,
                                                   process_synthesized_event);
                if (err < 0) {
@@ -814,6 +811,13 @@ static int record__synthesize(struct record *rec, bool tail)
                        goto out;
                }
 
+               err = perf_event__synthesize_features(tool, session, rec->evlist,
+                                                     process_synthesized_event);
+               if (err < 0) {
+                       pr_err("Couldn't synthesize features.\n");
+                       return err;
+               }
+
                if (have_tracepoints(&rec->evlist->entries)) {
                        /*
                         * FIXME err <= 0 here actually means that