Commit-ID:  919d86d3a3109d7d4f0d7347f34711ee2f8e6609
Gitweb:     http://git.kernel.org/tip/919d86d3a3109d7d4f0d7347f34711ee2f8e6609
Author:     Adrian Hunter <adrian.hun...@intel.com>
AuthorDate: Mon, 14 Jul 2014 13:02:51 +0300
Committer:  Arnaldo Carvalho de Melo <a...@redhat.com>
CommitDate: Wed, 16 Jul 2014 17:57:36 -0300

perf session: Flag if the event stream is entirely in memory

Flag if the event stream is a file that has been mmapped in one go.

This is useful, for example, if a tool needs to keep an event for later
reference.  If the new flag is set, a pointer to the event can be
retained, otherwise the event must be copied.

Signed-off-by: Adrian Hunter <adrian.hun...@intel.com>
Cc: David Ahern <dsah...@gmail.com>
Cc: Frederic Weisbecker <fweis...@gmail.com>
Cc: Jiri Olsa <jo...@redhat.com>
Cc: Namhyung Kim <namhy...@gmail.com>
Cc: Paul Mackerras <pau...@samba.org>
Cc: Peter Zijlstra <pet...@infradead.org>
Cc: Stephane Eranian <eran...@google.com>
Link: 
http://lkml.kernel.org/r/1405332185-4050-28-git-send-email-adrian.hun...@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <a...@redhat.com>
---
 tools/perf/util/session.c | 9 ++++++++-
 tools/perf/util/session.h | 3 +++
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
index c2f4ca9..eac14ce 100644
--- a/tools/perf/util/session.c
+++ b/tools/perf/util/session.c
@@ -1297,8 +1297,10 @@ int __perf_session__process_events(struct perf_session 
*session,
        ui_progress__init(&prog, file_size, "Processing events...");
 
        mmap_size = MMAP_SIZE;
-       if (mmap_size > file_size)
+       if (mmap_size > file_size) {
                mmap_size = file_size;
+               session->one_mmap = true;
+       }
 
        memset(mmaps, 0, sizeof(mmaps));
 
@@ -1320,6 +1322,10 @@ remap:
        mmaps[map_idx] = buf;
        map_idx = (map_idx + 1) & (ARRAY_SIZE(mmaps) - 1);
        file_pos = file_offset + head;
+       if (session->one_mmap) {
+               session->one_mmap_addr = buf;
+               session->one_mmap_offset = file_offset;
+       }
 
 more:
        event = fetch_mmaped_event(session, head, mmap_size, buf);
@@ -1365,6 +1371,7 @@ out_err:
        ui_progress__finish();
        perf_session__warn_about_errors(session, tool);
        perf_session_free_sample_buffers(session);
+       session->one_mmap = false;
        return err;
 }
 
diff --git a/tools/perf/util/session.h b/tools/perf/util/session.h
index 3140f8a..0321013 100644
--- a/tools/perf/util/session.h
+++ b/tools/perf/util/session.h
@@ -36,6 +36,9 @@ struct perf_session {
        struct trace_event      tevent;
        struct events_stats     stats;
        bool                    repipe;
+       bool                    one_mmap;
+       void                    *one_mmap_addr;
+       u64                     one_mmap_offset;
        struct ordered_samples  ordered_samples;
        struct perf_data_file   *file;
 };
--
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