aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorAdrian Hunter <adrian.hunter@intel.com>2014-07-14 06:02:51 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2014-07-16 16:57:36 -0400
commit919d86d3a3109d7d4f0d7347f34711ee2f8e6609 (patch)
treea03b196cfb5db134cb4209d7d24acf493823faae /tools
parent9c00a81b6aafc4ed375a43e7a54e6cf2d720c7c6 (diff)
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.hunter@intel.com> Cc: David Ahern <dsahern@gmail.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Namhyung Kim <namhyung@gmail.com> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Stephane Eranian <eranian@google.com> Link: http://lkml.kernel.org/r/1405332185-4050-28-git-send-email-adrian.hunter@intel.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/perf/util/session.c9
-rw-r--r--tools/perf/util/session.h3
2 files changed, 11 insertions, 1 deletions
diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
index c2f4ca917469..eac14ce0ae8d 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,
1297 ui_progress__init(&prog, file_size, "Processing events..."); 1297 ui_progress__init(&prog, file_size, "Processing events...");
1298 1298
1299 mmap_size = MMAP_SIZE; 1299 mmap_size = MMAP_SIZE;
1300 if (mmap_size > file_size) 1300 if (mmap_size > file_size) {
1301 mmap_size = file_size; 1301 mmap_size = file_size;
1302 session->one_mmap = true;
1303 }
1302 1304
1303 memset(mmaps, 0, sizeof(mmaps)); 1305 memset(mmaps, 0, sizeof(mmaps));
1304 1306
@@ -1320,6 +1322,10 @@ remap:
1320 mmaps[map_idx] = buf; 1322 mmaps[map_idx] = buf;
1321 map_idx = (map_idx + 1) & (ARRAY_SIZE(mmaps) - 1); 1323 map_idx = (map_idx + 1) & (ARRAY_SIZE(mmaps) - 1);
1322 file_pos = file_offset + head; 1324 file_pos = file_offset + head;
1325 if (session->one_mmap) {
1326 session->one_mmap_addr = buf;
1327 session->one_mmap_offset = file_offset;
1328 }
1323 1329
1324more: 1330more:
1325 event = fetch_mmaped_event(session, head, mmap_size, buf); 1331 event = fetch_mmaped_event(session, head, mmap_size, buf);
@@ -1365,6 +1371,7 @@ out_err:
1365 ui_progress__finish(); 1371 ui_progress__finish();
1366 perf_session__warn_about_errors(session, tool); 1372 perf_session__warn_about_errors(session, tool);
1367 perf_session_free_sample_buffers(session); 1373 perf_session_free_sample_buffers(session);
1374 session->one_mmap = false;
1368 return err; 1375 return err;
1369} 1376}
1370 1377
diff --git a/tools/perf/util/session.h b/tools/perf/util/session.h
index 3140f8ae6148..0321013bd9fd 100644
--- a/tools/perf/util/session.h
+++ b/tools/perf/util/session.h
@@ -36,6 +36,9 @@ struct perf_session {
36 struct trace_event tevent; 36 struct trace_event tevent;
37 struct events_stats stats; 37 struct events_stats stats;
38 bool repipe; 38 bool repipe;
39 bool one_mmap;
40 void *one_mmap_addr;
41 u64 one_mmap_offset;
39 struct ordered_samples ordered_samples; 42 struct ordered_samples ordered_samples;
40 struct perf_data_file *file; 43 struct perf_data_file *file;
41}; 44};