aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/util/session.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/perf/util/session.c')
-rw-r--r--tools/perf/util/session.c25
1 files changed, 14 insertions, 11 deletions
diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
index eac14ce0ae8d..88dfef70c13d 100644
--- a/tools/perf/util/session.c
+++ b/tools/perf/util/session.c
@@ -14,7 +14,6 @@
14#include "util.h" 14#include "util.h"
15#include "cpumap.h" 15#include "cpumap.h"
16#include "perf_regs.h" 16#include "perf_regs.h"
17#include "vdso.h"
18 17
19static int perf_session__open(struct perf_session *session) 18static int perf_session__open(struct perf_session *session)
20{ 19{
@@ -156,7 +155,6 @@ void perf_session__delete(struct perf_session *session)
156 if (session->file) 155 if (session->file)
157 perf_data_file__close(session->file); 156 perf_data_file__close(session->file);
158 free(session); 157 free(session);
159 vdso__exit();
160} 158}
161 159
162static int process_event_synth_tracing_data_stub(struct perf_tool *tool 160static int process_event_synth_tracing_data_stub(struct perf_tool *tool
@@ -511,6 +509,7 @@ static int flush_sample_queue(struct perf_session *s,
511 os->last_flush = iter->timestamp; 509 os->last_flush = iter->timestamp;
512 list_del(&iter->list); 510 list_del(&iter->list);
513 list_add(&iter->list, &os->sample_cache); 511 list_add(&iter->list, &os->sample_cache);
512 os->nr_samples--;
514 513
515 if (show_progress) 514 if (show_progress)
516 ui_progress__update(&prog, 1); 515 ui_progress__update(&prog, 1);
@@ -523,8 +522,6 @@ static int flush_sample_queue(struct perf_session *s,
523 list_entry(head->prev, struct sample_queue, list); 522 list_entry(head->prev, struct sample_queue, list);
524 } 523 }
525 524
526 os->nr_samples = 0;
527
528 return 0; 525 return 0;
529} 526}
530 527
@@ -994,8 +991,10 @@ static int perf_session_deliver_event(struct perf_session *session,
994 } 991 }
995} 992}
996 993
997static int perf_session__process_user_event(struct perf_session *session, union perf_event *event, 994static s64 perf_session__process_user_event(struct perf_session *session,
998 struct perf_tool *tool, u64 file_offset) 995 union perf_event *event,
996 struct perf_tool *tool,
997 u64 file_offset)
999{ 998{
1000 int fd = perf_data_file__fd(session->file); 999 int fd = perf_data_file__fd(session->file);
1001 int err; 1000 int err;
@@ -1037,7 +1036,7 @@ static void event_swap(union perf_event *event, bool sample_id_all)
1037 swap(event, sample_id_all); 1036 swap(event, sample_id_all);
1038} 1037}
1039 1038
1040static int perf_session__process_event(struct perf_session *session, 1039static s64 perf_session__process_event(struct perf_session *session,
1041 union perf_event *event, 1040 union perf_event *event,
1042 struct perf_tool *tool, 1041 struct perf_tool *tool,
1043 u64 file_offset) 1042 u64 file_offset)
@@ -1148,7 +1147,7 @@ static int __perf_session__process_pipe_events(struct perf_session *session,
1148 union perf_event *event; 1147 union perf_event *event;
1149 uint32_t size, cur_size = 0; 1148 uint32_t size, cur_size = 0;
1150 void *buf = NULL; 1149 void *buf = NULL;
1151 int skip = 0; 1150 s64 skip = 0;
1152 u64 head; 1151 u64 head;
1153 ssize_t err; 1152 ssize_t err;
1154 void *p; 1153 void *p;
@@ -1277,13 +1276,13 @@ int __perf_session__process_events(struct perf_session *session,
1277 u64 file_size, struct perf_tool *tool) 1276 u64 file_size, struct perf_tool *tool)
1278{ 1277{
1279 int fd = perf_data_file__fd(session->file); 1278 int fd = perf_data_file__fd(session->file);
1280 u64 head, page_offset, file_offset, file_pos; 1279 u64 head, page_offset, file_offset, file_pos, size;
1281 int err, mmap_prot, mmap_flags, map_idx = 0; 1280 int err, mmap_prot, mmap_flags, map_idx = 0;
1282 size_t mmap_size; 1281 size_t mmap_size;
1283 char *buf, *mmaps[NUM_MMAPS]; 1282 char *buf, *mmaps[NUM_MMAPS];
1284 union perf_event *event; 1283 union perf_event *event;
1285 uint32_t size;
1286 struct ui_progress prog; 1284 struct ui_progress prog;
1285 s64 skip;
1287 1286
1288 perf_tool__fill_defaults(tool); 1287 perf_tool__fill_defaults(tool);
1289 1288
@@ -1344,7 +1343,8 @@ more:
1344 size = event->header.size; 1343 size = event->header.size;
1345 1344
1346 if (size < sizeof(struct perf_event_header) || 1345 if (size < sizeof(struct perf_event_header) ||
1347 perf_session__process_event(session, event, tool, file_pos) < 0) { 1346 (skip = perf_session__process_event(session, event, tool, file_pos))
1347 < 0) {
1348 pr_err("%#" PRIx64 " [%#x]: failed to process type: %d\n", 1348 pr_err("%#" PRIx64 " [%#x]: failed to process type: %d\n",
1349 file_offset + head, event->header.size, 1349 file_offset + head, event->header.size,
1350 event->header.type); 1350 event->header.type);
@@ -1352,6 +1352,9 @@ more:
1352 goto out_err; 1352 goto out_err;
1353 } 1353 }
1354 1354
1355 if (skip)
1356 size += skip;
1357
1355 head += size; 1358 head += size;
1356 file_pos += size; 1359 file_pos += size;
1357 1360