On 06/12/2012 09:05 PM, Arnaldo Carvalho de Melo wrote:

        Could you please check out if my tmp.perf/core branch fixes the
problems reported lately about event name mismatches from perf.data
files collected in other machines, etc.

As of a8dfce8b37b2e0d216860191cd50fde501eeb036, perf sched replay
doesn't work because (perf_evlist__set_tracepoints_handlers):

...
err = trace_event__id(assocs[i].name); <-- err is host id, not from perf.data
if (err < 0)
        goto out;
evsel = perf_evlist__find_tracepoint_by_id(evlist, err); <-- oops!
...

Assuming event names are set, can we just lookup by name?

Dmitry

>From 5e1fbde04a2a8745711f439f4d4682b2215119b2 Mon Sep 17 00:00:00 2001
From: Dmitry Antipov <dmitry.anti...@linaro.org>
Date: Fri, 15 Jun 2012 11:49:47 +0400
Subject: [PATCH] perf: lookup by event name

Assuming event names are set, lookup tracepoint by name instead of ID.

Signed-off-by: Dmitry Antipov <dmitry.anti...@linaro.org>
---
 tools/perf/util/evlist.c |   10 +++-------
 1 files changed, 3 insertions(+), 7 deletions(-)

diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index 7400fb3..d6b7262 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -225,13 +225,13 @@ out_free_attrs:
 }
 
 static struct perf_evsel *
-       perf_evlist__find_tracepoint_by_id(struct perf_evlist *evlist, int id)
+       perf_evlist__find_tracepoint_by_name(struct perf_evlist *evlist, const 
char *name)
 {
        struct perf_evsel *evsel;
 
        list_for_each_entry(evsel, &evlist->entries, node) {
                if (evsel->attr.type   == PERF_TYPE_TRACEPOINT &&
-                   (int)evsel->attr.config == id)
+                   !strcmp(evsel->name, name))
                        return evsel;
        }
 
@@ -247,11 +247,7 @@ int perf_evlist__set_tracepoints_handlers(struct 
perf_evlist *evlist,
        size_t i;
 
        for (i = 0; i < nr_assocs; i++) {
-               err = trace_event__id(assocs[i].name);
-               if (err < 0)
-                       goto out;
-
-               evsel = perf_evlist__find_tracepoint_by_id(evlist, err);
+               evsel = perf_evlist__find_tracepoint_by_name(evlist, 
assocs[i].name);
                if (evsel == NULL)
                        continue;
 
-- 
1.7.7.6

_______________________________________________
linaro-dev mailing list
linaro-dev@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-dev

Reply via email to