diff options
Diffstat (limited to 'tools/perf/util/session.c')
-rw-r--r-- | tools/perf/util/session.c | 25 |
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 | ||
19 | static int perf_session__open(struct perf_session *session) | 18 | static 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 | ||
162 | static int process_event_synth_tracing_data_stub(struct perf_tool *tool | 160 | static 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 | ||
997 | static int perf_session__process_user_event(struct perf_session *session, union perf_event *event, | 994 | static 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 | ||
1040 | static int perf_session__process_event(struct perf_session *session, | 1039 | static 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 | ||