Handles initializations typically done as part of processing the file
header and HEADER_TRACING_DATA event.

v2: close fd as noticed by Namhyung.

Signed-off-by: David Ahern <dsah...@gmail.com>
Cc: Arnaldo Carvalho de Melo <a...@ghostprotocols.net>
Cc: Ingo Molnar <mi...@kernel.org>
Cc: Frederic Weisbecker <fweis...@gmail.com>
Cc: Peter Zijlstra <pet...@infradead.org>
Cc: Jiri Olsa <jo...@redhat.com>
Cc: Namhyung Kim <namhy...@kernel.org>
Cc: Xiao Guangrong <xiaoguangr...@linux.vnet.ibm.com>
Cc: Runzhen Wang <runz...@linux.vnet.ibm.com>
---
 tools/perf/util/evlist.c |   35 +++++++++++++++++++++++++++++++++++
 tools/perf/util/evlist.h |    3 +++
 2 files changed, 38 insertions(+)

diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index 72b9551..b686411 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -14,6 +14,7 @@
 #include "target.h"
 #include "evlist.h"
 #include "evsel.h"
+#include "trace-event.h"
 #include <unistd.h>
 
 #include "parse-events.h"
@@ -234,6 +235,40 @@ int perf_evlist__prepare_tracepoint_events(struct 
perf_evlist *evlist,
        return 0;
 }
 
+int perf_evlist__trace_init(struct perf_evlist *evlist,
+                           struct perf_session *session)
+{
+       struct tracing_data *tdata;
+       char temp_file[] = "/tmp/perf-XXXXXXXX";
+       int fd;
+       int rc = 0;
+
+       fd = mkstemp(temp_file);
+       if (fd < 0) {
+               pr_err("mkstemp failed\n");
+               return -1;
+       }
+       unlink(temp_file);
+
+       tdata = tracing_data_get(&evlist->entries, fd, false);
+       if (!tdata) {
+               rc = -1;
+               goto out;
+       }
+
+       lseek(fd, 0, SEEK_SET);
+       (void) trace_report(fd, &session->pevent, false);
+       tracing_data_put(tdata);
+
+       rc = perf_evlist__prepare_tracepoint_events(evlist, session->pevent);
+
+out:
+       close(fd);
+
+       return rc;
+}
+
+
 static int trace_event__id(const char *evname)
 {
        char *filename, *colon;
diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h
index c2cf183..c579f3d 100644
--- a/tools/perf/util/evlist.h
+++ b/tools/perf/util/evlist.h
@@ -8,6 +8,7 @@
 #include "event-parse.h"
 #include "evsel.h"
 #include "util.h"
+#include "session.h"
 #include <unistd.h>
 
 struct pollfd;
@@ -66,6 +67,8 @@ int perf_evlist__prepare_tracepoint_events(struct perf_evlist 
*evlist,
 int perf_evlist__add_tracepoints(struct perf_evlist *evlist,
                                 const char * const tracepoints[],
                                 size_t nr_tracepoints);
+int perf_evlist__trace_init(struct perf_evlist *evlist,
+                           struct perf_session *session);
 
 #define perf_evlist__add_default_attrs(evlist, array) \
        __perf_evlist__add_default_attrs(evlist, array, ARRAY_SIZE(array))
-- 
1.7.10.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to