public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] perf sched replay: fix event lookup
@ 2012-06-09  9:05 Dmitry Antipov
  2012-06-11  5:46 ` Namhyung Kim
  2012-06-25 18:02 ` [PATCH] perf sched replay: fix event lookup Arnaldo Carvalho de Melo
  0 siblings, 2 replies; 10+ messages in thread
From: Dmitry Antipov @ 2012-06-09  9:05 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo, Ingo Molnar, Paul Mackerras,
	Peter Zijlstra
  Cc: linux-kernel, linaro-dev, patches, Dmitry Antipov

Use new function trace_find_event_by_name to lookup events before
looking through /sys files. This helps 'perf sched replay' to map
event names to IDs correctly when processing perf.data recorded
on another machine.

Signed-off-by: Dmitry Antipov <dmitry.antipov@linaro.org>
---
 tools/perf/util/evlist.c            |   18 ++++++++++++++++--
 tools/perf/util/trace-event-parse.c |    4 ++++
 tools/perf/util/trace-event.h       |    1 +
 3 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index 4ac5f5a..7ebb9c5 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -17,6 +17,7 @@
 #include <unistd.h>
 
 #include "parse-events.h"
+#include "trace-event.h"
 
 #include <sys/mman.h>
 
@@ -231,12 +232,25 @@ int perf_evlist__set_tracepoints_handlers(struct perf_evlist *evlist,
 					  const struct perf_evsel_str_handler *assocs,
 					  size_t nr_assocs)
 {
+	struct event_format *event;
 	struct perf_evsel *evsel;
+	char *p, *sys, *name;
 	int err;
-	size_t i;
+	size_t i, off;
 
 	for (i = 0; i < nr_assocs; i++) {
-		err = trace_event__id(assocs[i].name);
+		err = -ENOENT;
+		p = strchr(assocs[i].name, ':');
+		if (!p)
+			goto out;
+		off = p - assocs[i].name;
+		sys = malloc(off + 1);
+		memcpy(sys, assocs[i].name, off);
+		sys[off] = '\0';
+		name = p + 1;
+		event = trace_find_event_by_name(sys, name);
+		err = event ? event->id : trace_event__id(assocs[i].name);
+		free(sys);
 		if (err < 0)
 			goto out;
 
diff --git a/tools/perf/util/trace-event-parse.c b/tools/perf/util/trace-event-parse.c
index df2fddb..44cbb40 100644
--- a/tools/perf/util/trace-event-parse.c
+++ b/tools/perf/util/trace-event-parse.c
@@ -176,6 +176,10 @@ struct event_format *trace_find_event(int type)
 	return pevent_find_event(pevent, type);
 }
 
+struct event_format *trace_find_event_by_name(const char *sys, const char *name)
+{
+	return pevent_find_event_by_name(pevent, sys, name);
+}
 
 void print_trace_event(int cpu, void *data, int size)
 {
diff --git a/tools/perf/util/trace-event.h b/tools/perf/util/trace-event.h
index 639852a..66f83a0 100644
--- a/tools/perf/util/trace-event.h
+++ b/tools/perf/util/trace-event.h
@@ -40,6 +40,7 @@ int parse_event_file(char *buf, unsigned long size, char *sys);
 
 struct pevent_record *trace_peek_data(int cpu);
 struct event_format *trace_find_event(int type);
+struct event_format *trace_find_event_by_name(const char *sys, const char *name);
 
 unsigned long long
 raw_field_value(struct event_format *event, const char *name, void *data);
-- 
1.7.7.6


^ permalink raw reply related	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2012-06-29 16:18 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-06-09  9:05 [PATCH] perf sched replay: fix event lookup Dmitry Antipov
2012-06-11  5:46 ` Namhyung Kim
2012-06-11 14:08   ` Arnaldo Carvalho de Melo
2012-06-12  6:01     ` Namhyung Kim
2012-06-12 17:11       ` Arnaldo Carvalho de Melo
2012-06-25 23:20       ` Arnaldo Carvalho de Melo
2012-06-27  9:18         ` Dmitry Antipov
2012-06-27 14:21           ` Arnaldo Carvalho de Melo
2012-06-29 16:17         ` [tip:perf/core] perf tools: Stop using a global trace events description list tip-bot for Arnaldo Carvalho de Melo
2012-06-25 18:02 ` [PATCH] perf sched replay: fix event lookup Arnaldo Carvalho de Melo

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox