diff options
author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2015-03-03 09:58:45 -0500 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2015-03-11 09:17:09 -0400 |
commit | b7b61cbebd789a3dbca522e3fdb727fe5c95593f (patch) | |
tree | ea6757b8b1d85b1562ce10217912c5827a4d2b23 /tools | |
parent | fa713a4eb9cebe5dec71b1bd11429603e17d841d (diff) |
perf ordered_events: Shorten function signatures
By keeping pointers to machines, evlist and tool in ordered_events.
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Borislav Petkov <bp@suse.de>
Cc: David Ahern <dsahern@gmail.com>
Cc: Don Zickus <dzickus@redhat.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-0c6huyaf59mqtm2ek9pmposl@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/perf/builtin-annotate.c | 2 | ||||
-rw-r--r-- | tools/perf/builtin-buildid-list.c | 2 | ||||
-rw-r--r-- | tools/perf/builtin-diff.c | 2 | ||||
-rw-r--r-- | tools/perf/builtin-inject.c | 6 | ||||
-rw-r--r-- | tools/perf/builtin-kmem.c | 2 | ||||
-rw-r--r-- | tools/perf/builtin-kvm.c | 6 | ||||
-rw-r--r-- | tools/perf/builtin-lock.c | 2 | ||||
-rw-r--r-- | tools/perf/builtin-mem.c | 2 | ||||
-rw-r--r-- | tools/perf/builtin-record.c | 4 | ||||
-rw-r--r-- | tools/perf/builtin-report.c | 2 | ||||
-rw-r--r-- | tools/perf/builtin-sched.c | 2 | ||||
-rw-r--r-- | tools/perf/builtin-script.c | 2 | ||||
-rw-r--r-- | tools/perf/builtin-timechart.c | 2 | ||||
-rw-r--r-- | tools/perf/builtin-trace.c | 2 | ||||
-rw-r--r-- | tools/perf/util/data-convert-bt.c | 4 | ||||
-rw-r--r-- | tools/perf/util/ordered-events.c | 23 | ||||
-rw-r--r-- | tools/perf/util/ordered-events.h | 10 | ||||
-rw-r--r-- | tools/perf/util/session.c | 65 | ||||
-rw-r--r-- | tools/perf/util/session.h | 11 |
19 files changed, 68 insertions, 83 deletions
diff --git a/tools/perf/builtin-annotate.c b/tools/perf/builtin-annotate.c index 747f86103599..71bf7451c0ca 100644 --- a/tools/perf/builtin-annotate.c +++ b/tools/perf/builtin-annotate.c | |||
@@ -208,7 +208,7 @@ static int __cmd_annotate(struct perf_annotate *ann) | |||
208 | goto out; | 208 | goto out; |
209 | } | 209 | } |
210 | 210 | ||
211 | ret = perf_session__process_events(session, &ann->tool); | 211 | ret = perf_session__process_events(session); |
212 | if (ret) | 212 | if (ret) |
213 | goto out; | 213 | goto out; |
214 | 214 | ||
diff --git a/tools/perf/builtin-buildid-list.c b/tools/perf/builtin-buildid-list.c index ed3873b3e238..feb420f74c2d 100644 --- a/tools/perf/builtin-buildid-list.c +++ b/tools/perf/builtin-buildid-list.c | |||
@@ -74,7 +74,7 @@ static int perf_session__list_build_ids(bool force, bool with_hits) | |||
74 | * the record stream. Buildids are stored as RECORD_HEADER_BUILD_ID | 74 | * the record stream. Buildids are stored as RECORD_HEADER_BUILD_ID |
75 | */ | 75 | */ |
76 | if (with_hits || perf_data_file__is_pipe(&file)) | 76 | if (with_hits || perf_data_file__is_pipe(&file)) |
77 | perf_session__process_events(session, &build_id__mark_dso_hit_ops); | 77 | perf_session__process_events(session); |
78 | 78 | ||
79 | perf_session__fprintf_dsos_buildid(session, stdout, dso__skip_buildid, with_hits); | 79 | perf_session__fprintf_dsos_buildid(session, stdout, dso__skip_buildid, with_hits); |
80 | perf_session__delete(session); | 80 | perf_session__delete(session); |
diff --git a/tools/perf/builtin-diff.c b/tools/perf/builtin-diff.c index 74aada554b12..f800fc95f5d7 100644 --- a/tools/perf/builtin-diff.c +++ b/tools/perf/builtin-diff.c | |||
@@ -747,7 +747,7 @@ static int __cmd_diff(void) | |||
747 | goto out_delete; | 747 | goto out_delete; |
748 | } | 748 | } |
749 | 749 | ||
750 | ret = perf_session__process_events(d->session, &tool); | 750 | ret = perf_session__process_events(d->session); |
751 | if (ret) { | 751 | if (ret) { |
752 | pr_err("Failed to process %s\n", d->file.path); | 752 | pr_err("Failed to process %s\n", d->file.path); |
753 | goto out_delete; | 753 | goto out_delete; |
diff --git a/tools/perf/builtin-inject.c b/tools/perf/builtin-inject.c index a13641e066f5..2563f07ec0e5 100644 --- a/tools/perf/builtin-inject.c +++ b/tools/perf/builtin-inject.c | |||
@@ -359,8 +359,6 @@ static int __cmd_inject(struct perf_inject *inject) | |||
359 | } else if (inject->sched_stat) { | 359 | } else if (inject->sched_stat) { |
360 | struct perf_evsel *evsel; | 360 | struct perf_evsel *evsel; |
361 | 361 | ||
362 | inject->tool.ordered_events = true; | ||
363 | |||
364 | evlist__for_each(session->evlist, evsel) { | 362 | evlist__for_each(session->evlist, evsel) { |
365 | const char *name = perf_evsel__name(evsel); | 363 | const char *name = perf_evsel__name(evsel); |
366 | 364 | ||
@@ -379,7 +377,7 @@ static int __cmd_inject(struct perf_inject *inject) | |||
379 | if (!file_out->is_pipe) | 377 | if (!file_out->is_pipe) |
380 | lseek(fd, session->header.data_offset, SEEK_SET); | 378 | lseek(fd, session->header.data_offset, SEEK_SET); |
381 | 379 | ||
382 | ret = perf_session__process_events(session, &inject->tool); | 380 | ret = perf_session__process_events(session); |
383 | 381 | ||
384 | if (!file_out->is_pipe) { | 382 | if (!file_out->is_pipe) { |
385 | if (inject->build_ids) | 383 | if (inject->build_ids) |
@@ -458,6 +456,8 @@ int cmd_inject(int argc, const char **argv, const char *prefix __maybe_unused) | |||
458 | return -1; | 456 | return -1; |
459 | } | 457 | } |
460 | 458 | ||
459 | inject.tool.ordered_events = inject.sched_stat; | ||
460 | |||
461 | file.path = inject.input_name; | 461 | file.path = inject.input_name; |
462 | inject.session = perf_session__new(&file, true, &inject.tool); | 462 | inject.session = perf_session__new(&file, true, &inject.tool); |
463 | if (inject.session == NULL) | 463 | if (inject.session == NULL) |
diff --git a/tools/perf/builtin-kmem.c b/tools/perf/builtin-kmem.c index f295141025bc..62f165a9fa40 100644 --- a/tools/perf/builtin-kmem.c +++ b/tools/perf/builtin-kmem.c | |||
@@ -426,7 +426,7 @@ static int __cmd_kmem(struct perf_session *session) | |||
426 | } | 426 | } |
427 | 427 | ||
428 | setup_pager(); | 428 | setup_pager(); |
429 | err = perf_session__process_events(session, &perf_kmem); | 429 | err = perf_session__process_events(session); |
430 | if (err != 0) | 430 | if (err != 0) |
431 | goto out; | 431 | goto out; |
432 | sort_result(); | 432 | sort_result(); |
diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c index 0894a817f67e..802b8f53fa9a 100644 --- a/tools/perf/builtin-kvm.c +++ b/tools/perf/builtin-kvm.c | |||
@@ -730,9 +730,9 @@ static s64 perf_kvm__mmap_read_idx(struct perf_kvm_stat *kvm, int idx, | |||
730 | return -1; | 730 | return -1; |
731 | } | 731 | } |
732 | 732 | ||
733 | err = perf_session_queue_event(kvm->session, event, &kvm->tool, &sample, 0); | 733 | err = perf_session__queue_event(kvm->session, event, &sample, 0); |
734 | /* | 734 | /* |
735 | * FIXME: Here we can't consume the event, as perf_session_queue_event will | 735 | * FIXME: Here we can't consume the event, as perf_session__queue_event will |
736 | * point to it, and it'll get possibly overwritten by the kernel. | 736 | * point to it, and it'll get possibly overwritten by the kernel. |
737 | */ | 737 | */ |
738 | perf_evlist__mmap_consume(kvm->evlist, idx); | 738 | perf_evlist__mmap_consume(kvm->evlist, idx); |
@@ -1066,7 +1066,7 @@ static int read_events(struct perf_kvm_stat *kvm) | |||
1066 | if (ret < 0) | 1066 | if (ret < 0) |
1067 | return ret; | 1067 | return ret; |
1068 | 1068 | ||
1069 | return perf_session__process_events(kvm->session, &kvm->tool); | 1069 | return perf_session__process_events(kvm->session); |
1070 | } | 1070 | } |
1071 | 1071 | ||
1072 | static int parse_target_str(struct perf_kvm_stat *kvm) | 1072 | static int parse_target_str(struct perf_kvm_stat *kvm) |
diff --git a/tools/perf/builtin-lock.c b/tools/perf/builtin-lock.c index e7ec71589da6..7893a9bba2a7 100644 --- a/tools/perf/builtin-lock.c +++ b/tools/perf/builtin-lock.c | |||
@@ -878,7 +878,7 @@ static int __cmd_report(bool display_info) | |||
878 | if (select_key()) | 878 | if (select_key()) |
879 | goto out_delete; | 879 | goto out_delete; |
880 | 880 | ||
881 | err = perf_session__process_events(session, &eops); | 881 | err = perf_session__process_events(session); |
882 | if (err) | 882 | if (err) |
883 | goto out_delete; | 883 | goto out_delete; |
884 | 884 | ||
diff --git a/tools/perf/builtin-mem.c b/tools/perf/builtin-mem.c index 9b5663950a4d..46c69318de84 100644 --- a/tools/perf/builtin-mem.c +++ b/tools/perf/builtin-mem.c | |||
@@ -141,7 +141,7 @@ static int report_raw_events(struct perf_mem *mem) | |||
141 | 141 | ||
142 | printf("# PID, TID, IP, ADDR, LOCAL WEIGHT, DSRC, SYMBOL\n"); | 142 | printf("# PID, TID, IP, ADDR, LOCAL WEIGHT, DSRC, SYMBOL\n"); |
143 | 143 | ||
144 | err = perf_session__process_events(session, &mem->tool); | 144 | err = perf_session__process_events(session); |
145 | if (err) | 145 | if (err) |
146 | return err; | 146 | return err; |
147 | 147 | ||
diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c index 4fdad06d37db..5a2ff510b75b 100644 --- a/tools/perf/builtin-record.c +++ b/tools/perf/builtin-record.c | |||
@@ -225,7 +225,7 @@ static int process_buildids(struct record *rec) | |||
225 | */ | 225 | */ |
226 | symbol_conf.ignore_vmlinux_buildid = true; | 226 | symbol_conf.ignore_vmlinux_buildid = true; |
227 | 227 | ||
228 | return perf_session__process_events(session, &rec->tool); | 228 | return perf_session__process_events(session); |
229 | } | 229 | } |
230 | 230 | ||
231 | static void perf_event__synthesize_guest_os(struct machine *machine, void *data) | 231 | static void perf_event__synthesize_guest_os(struct machine *machine, void *data) |
@@ -343,7 +343,7 @@ static int __cmd_record(struct record *rec, int argc, const char **argv) | |||
343 | signal(SIGINT, sig_handler); | 343 | signal(SIGINT, sig_handler); |
344 | signal(SIGTERM, sig_handler); | 344 | signal(SIGTERM, sig_handler); |
345 | 345 | ||
346 | session = perf_session__new(file, false, NULL); | 346 | session = perf_session__new(file, false, tool); |
347 | if (session == NULL) { | 347 | if (session == NULL) { |
348 | pr_err("Perf session creation failed.\n"); | 348 | pr_err("Perf session creation failed.\n"); |
349 | return -1; | 349 | return -1; |
diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c index fb350343b1d7..52f74e1367e9 100644 --- a/tools/perf/builtin-report.c +++ b/tools/perf/builtin-report.c | |||
@@ -482,7 +482,7 @@ static int __cmd_report(struct report *rep) | |||
482 | if (ret) | 482 | if (ret) |
483 | return ret; | 483 | return ret; |
484 | 484 | ||
485 | ret = perf_session__process_events(session, &rep->tool); | 485 | ret = perf_session__process_events(session); |
486 | if (ret) | 486 | if (ret) |
487 | return ret; | 487 | return ret; |
488 | 488 | ||
diff --git a/tools/perf/builtin-sched.c b/tools/perf/builtin-sched.c index a3ebf1d3c29d..3b3a5bb97059 100644 --- a/tools/perf/builtin-sched.c +++ b/tools/perf/builtin-sched.c | |||
@@ -1467,7 +1467,7 @@ static int perf_sched__read_events(struct perf_sched *sched) | |||
1467 | goto out_delete; | 1467 | goto out_delete; |
1468 | 1468 | ||
1469 | if (perf_session__has_traces(session, "record -R")) { | 1469 | if (perf_session__has_traces(session, "record -R")) { |
1470 | int err = perf_session__process_events(session, &sched->tool); | 1470 | int err = perf_session__process_events(session); |
1471 | if (err) { | 1471 | if (err) { |
1472 | pr_err("Failed to process events, error %d", err); | 1472 | pr_err("Failed to process events, error %d", err); |
1473 | goto out_delete; | 1473 | goto out_delete; |
diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c index ce304dfd962a..c7e6750923ef 100644 --- a/tools/perf/builtin-script.c +++ b/tools/perf/builtin-script.c | |||
@@ -800,7 +800,7 @@ static int __cmd_script(struct perf_script *script) | |||
800 | script->tool.mmap2 = process_mmap2_event; | 800 | script->tool.mmap2 = process_mmap2_event; |
801 | } | 801 | } |
802 | 802 | ||
803 | ret = perf_session__process_events(script->session, &script->tool); | 803 | ret = perf_session__process_events(script->session); |
804 | 804 | ||
805 | if (debug_mode) | 805 | if (debug_mode) |
806 | pr_err("Misordered timestamps: %" PRIu64 "\n", nr_unordered); | 806 | pr_err("Misordered timestamps: %" PRIu64 "\n", nr_unordered); |
diff --git a/tools/perf/builtin-timechart.c b/tools/perf/builtin-timechart.c index f3bb1a4bf060..51440d1fc722 100644 --- a/tools/perf/builtin-timechart.c +++ b/tools/perf/builtin-timechart.c | |||
@@ -1623,7 +1623,7 @@ static int __cmd_timechart(struct timechart *tchart, const char *output_name) | |||
1623 | goto out_delete; | 1623 | goto out_delete; |
1624 | } | 1624 | } |
1625 | 1625 | ||
1626 | ret = perf_session__process_events(session, &tchart->tool); | 1626 | ret = perf_session__process_events(session); |
1627 | if (ret) | 1627 | if (ret) |
1628 | goto out_delete; | 1628 | goto out_delete; |
1629 | 1629 | ||
diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index 211614fba217..6969ba98ff2f 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c | |||
@@ -2408,7 +2408,7 @@ static int trace__replay(struct trace *trace) | |||
2408 | 2408 | ||
2409 | setup_pager(); | 2409 | setup_pager(); |
2410 | 2410 | ||
2411 | err = perf_session__process_events(session, &trace->tool); | 2411 | err = perf_session__process_events(session); |
2412 | if (err) | 2412 | if (err) |
2413 | pr_err("Failed to process events, error %d", err); | 2413 | pr_err("Failed to process events, error %d", err); |
2414 | 2414 | ||
diff --git a/tools/perf/util/data-convert-bt.c b/tools/perf/util/data-convert-bt.c index e372e03ff480..1afd381b2346 100644 --- a/tools/perf/util/data-convert-bt.c +++ b/tools/perf/util/data-convert-bt.c | |||
@@ -579,7 +579,7 @@ int bt_convert__perf2ctf(const char *input, const char *path) | |||
579 | return -1; | 579 | return -1; |
580 | 580 | ||
581 | /* perf.data session */ | 581 | /* perf.data session */ |
582 | session = perf_session__new(&file, 0, NULL); | 582 | session = perf_session__new(&file, 0, &c.tool); |
583 | if (!session) | 583 | if (!session) |
584 | goto free_writer; | 584 | goto free_writer; |
585 | 585 | ||
@@ -591,7 +591,7 @@ int bt_convert__perf2ctf(const char *input, const char *path) | |||
591 | if (setup_events(cw, session)) | 591 | if (setup_events(cw, session)) |
592 | goto free_session; | 592 | goto free_session; |
593 | 593 | ||
594 | err = perf_session__process_events(session, &c.tool); | 594 | err = perf_session__process_events(session); |
595 | if (!err) | 595 | if (!err) |
596 | err = bt_ctf_stream_flush(cw->stream); | 596 | err = bt_ctf_stream_flush(cw->stream); |
597 | 597 | ||
diff --git a/tools/perf/util/ordered-events.c b/tools/perf/util/ordered-events.c index e6ab630dd374..bad46ce16591 100644 --- a/tools/perf/util/ordered-events.c +++ b/tools/perf/util/ordered-events.c | |||
@@ -153,10 +153,7 @@ void ordered_events__delete(struct ordered_events *oe, struct ordered_event *eve | |||
153 | free_dup_event(oe, event->event); | 153 | free_dup_event(oe, event->event); |
154 | } | 154 | } |
155 | 155 | ||
156 | static int __ordered_events__flush(struct ordered_events *oe, | 156 | static int __ordered_events__flush(struct ordered_events *oe) |
157 | struct machines *machines, | ||
158 | struct perf_evlist *evlist, | ||
159 | struct perf_tool *tool) | ||
160 | { | 157 | { |
161 | struct list_head *head = &oe->events; | 158 | struct list_head *head = &oe->events; |
162 | struct ordered_event *tmp, *iter; | 159 | struct ordered_event *tmp, *iter; |
@@ -180,12 +177,12 @@ static int __ordered_events__flush(struct ordered_events *oe, | |||
180 | if (iter->timestamp > limit) | 177 | if (iter->timestamp > limit) |
181 | break; | 178 | break; |
182 | 179 | ||
183 | ret = perf_evlist__parse_sample(evlist, iter->event, &sample); | 180 | ret = perf_evlist__parse_sample(oe->evlist, iter->event, &sample); |
184 | if (ret) | 181 | if (ret) |
185 | pr_err("Can't parse sample, err = %d\n", ret); | 182 | pr_err("Can't parse sample, err = %d\n", ret); |
186 | else { | 183 | else { |
187 | ret = machines__deliver_event(machines, evlist, iter->event, | 184 | ret = machines__deliver_event(oe->machines, oe->evlist, iter->event, |
188 | &sample, tool, iter->file_offset); | 185 | &sample, oe->tool, iter->file_offset); |
189 | if (ret) | 186 | if (ret) |
190 | return ret; | 187 | return ret; |
191 | } | 188 | } |
@@ -205,9 +202,7 @@ static int __ordered_events__flush(struct ordered_events *oe, | |||
205 | return 0; | 202 | return 0; |
206 | } | 203 | } |
207 | 204 | ||
208 | int ordered_events__flush(struct ordered_events *oe, struct machines *machines, | 205 | int ordered_events__flush(struct ordered_events *oe, enum oe_flush how) |
209 | struct perf_evlist *evlist, struct perf_tool *tool, | ||
210 | enum oe_flush how) | ||
211 | { | 206 | { |
212 | static const char * const str[] = { | 207 | static const char * const str[] = { |
213 | "NONE", | 208 | "NONE", |
@@ -252,7 +247,7 @@ int ordered_events__flush(struct ordered_events *oe, struct machines *machines, | |||
252 | str[how], oe->nr_events); | 247 | str[how], oe->nr_events); |
253 | pr_oe_time(oe->max_timestamp, "max_timestamp\n"); | 248 | pr_oe_time(oe->max_timestamp, "max_timestamp\n"); |
254 | 249 | ||
255 | err = __ordered_events__flush(oe, machines, evlist, tool); | 250 | err = __ordered_events__flush(oe); |
256 | 251 | ||
257 | if (!err) { | 252 | if (!err) { |
258 | if (how == OE_FLUSH__ROUND) | 253 | if (how == OE_FLUSH__ROUND) |
@@ -268,13 +263,17 @@ int ordered_events__flush(struct ordered_events *oe, struct machines *machines, | |||
268 | return err; | 263 | return err; |
269 | } | 264 | } |
270 | 265 | ||
271 | void ordered_events__init(struct ordered_events *oe) | 266 | void ordered_events__init(struct ordered_events *oe, struct machines *machines, |
267 | struct perf_evlist *evlist, struct perf_tool *tool) | ||
272 | { | 268 | { |
273 | INIT_LIST_HEAD(&oe->events); | 269 | INIT_LIST_HEAD(&oe->events); |
274 | INIT_LIST_HEAD(&oe->cache); | 270 | INIT_LIST_HEAD(&oe->cache); |
275 | INIT_LIST_HEAD(&oe->to_free); | 271 | INIT_LIST_HEAD(&oe->to_free); |
276 | oe->max_alloc_size = (u64) -1; | 272 | oe->max_alloc_size = (u64) -1; |
277 | oe->cur_alloc_size = 0; | 273 | oe->cur_alloc_size = 0; |
274 | oe->evlist = evlist; | ||
275 | oe->machines = machines; | ||
276 | oe->tool = tool; | ||
278 | } | 277 | } |
279 | 278 | ||
280 | void ordered_events__free(struct ordered_events *oe) | 279 | void ordered_events__free(struct ordered_events *oe) |
diff --git a/tools/perf/util/ordered-events.h b/tools/perf/util/ordered-events.h index e09f2433c6d6..ef7d73ecb0d0 100644 --- a/tools/perf/util/ordered-events.h +++ b/tools/perf/util/ordered-events.h | |||
@@ -32,6 +32,9 @@ struct ordered_events { | |||
32 | struct list_head to_free; | 32 | struct list_head to_free; |
33 | struct ordered_event *buffer; | 33 | struct ordered_event *buffer; |
34 | struct ordered_event *last; | 34 | struct ordered_event *last; |
35 | struct machines *machines; | ||
36 | struct perf_evlist *evlist; | ||
37 | struct perf_tool *tool; | ||
35 | int buffer_idx; | 38 | int buffer_idx; |
36 | unsigned int nr_events; | 39 | unsigned int nr_events; |
37 | enum oe_flush last_flush_type; | 40 | enum oe_flush last_flush_type; |
@@ -41,10 +44,9 @@ struct ordered_events { | |||
41 | struct ordered_event *ordered_events__new(struct ordered_events *oe, u64 timestamp, | 44 | struct ordered_event *ordered_events__new(struct ordered_events *oe, u64 timestamp, |
42 | union perf_event *event); | 45 | union perf_event *event); |
43 | void ordered_events__delete(struct ordered_events *oe, struct ordered_event *event); | 46 | void ordered_events__delete(struct ordered_events *oe, struct ordered_event *event); |
44 | int ordered_events__flush(struct ordered_events *oe, struct machines *machines, | 47 | int ordered_events__flush(struct ordered_events *oe, enum oe_flush how); |
45 | struct perf_evlist *evlist, struct perf_tool *tool, | 48 | void ordered_events__init(struct ordered_events *oe, struct machines *machines, |
46 | enum oe_flush how); | 49 | struct perf_evlist *evlsit, struct perf_tool *tool); |
47 | void ordered_events__init(struct ordered_events *oe); | ||
48 | void ordered_events__free(struct ordered_events *oe); | 50 | void ordered_events__free(struct ordered_events *oe); |
49 | 51 | ||
50 | static inline | 52 | static inline |
diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c index 23be146bd2fc..c6dd89f62fc4 100644 --- a/tools/perf/util/session.c +++ b/tools/perf/util/session.c | |||
@@ -95,7 +95,6 @@ struct perf_session *perf_session__new(struct perf_data_file *file, | |||
95 | goto out; | 95 | goto out; |
96 | 96 | ||
97 | session->repipe = repipe; | 97 | session->repipe = repipe; |
98 | ordered_events__init(&session->ordered_events); | ||
99 | machines__init(&session->machines); | 98 | machines__init(&session->machines); |
100 | 99 | ||
101 | if (file) { | 100 | if (file) { |
@@ -126,7 +125,8 @@ struct perf_session *perf_session__new(struct perf_data_file *file, | |||
126 | tool->ordered_events && !perf_evlist__sample_id_all(session->evlist)) { | 125 | tool->ordered_events && !perf_evlist__sample_id_all(session->evlist)) { |
127 | dump_printf("WARNING: No sample_id_all support, falling back to unordered processing\n"); | 126 | dump_printf("WARNING: No sample_id_all support, falling back to unordered processing\n"); |
128 | tool->ordered_events = false; | 127 | tool->ordered_events = false; |
129 | } | 128 | } else |
129 | ordered_events__init(&session->ordered_events, &session->machines, session->evlist, tool); | ||
130 | 130 | ||
131 | return session; | 131 | return session; |
132 | 132 | ||
@@ -508,24 +508,19 @@ static perf_event__swap_op perf_event__swap_ops[] = { | |||
508 | * Flush every events below timestamp 7 | 508 | * Flush every events below timestamp 7 |
509 | * etc... | 509 | * etc... |
510 | */ | 510 | */ |
511 | static int process_finished_round(struct perf_tool *tool, | 511 | static int process_finished_round(struct perf_tool *tool __maybe_unused, |
512 | union perf_event *event __maybe_unused, | 512 | union perf_event *event __maybe_unused, |
513 | struct perf_session *session) | 513 | struct perf_session *session) |
514 | { | 514 | { |
515 | struct ordered_events *oe = &session->ordered_events; | 515 | struct ordered_events *oe = &session->ordered_events; |
516 | struct perf_evlist *evlist = session->evlist; | ||
517 | struct machines *machines = &session->machines; | ||
518 | 516 | ||
519 | return ordered_events__flush(oe, machines, evlist, tool, OE_FLUSH__ROUND); | 517 | return ordered_events__flush(oe, OE_FLUSH__ROUND); |
520 | } | 518 | } |
521 | 519 | ||
522 | int perf_session_queue_event(struct perf_session *s, union perf_event *event, | 520 | int perf_session__queue_event(struct perf_session *s, union perf_event *event, |
523 | struct perf_tool *tool, struct perf_sample *sample, | 521 | struct perf_sample *sample, u64 file_offset) |
524 | u64 file_offset) | ||
525 | { | 522 | { |
526 | struct ordered_events *oe = &s->ordered_events; | 523 | struct ordered_events *oe = &s->ordered_events; |
527 | struct perf_evlist *evlist = s->evlist; | ||
528 | struct machines *machines = &s->machines; | ||
529 | 524 | ||
530 | u64 timestamp = sample->time; | 525 | u64 timestamp = sample->time; |
531 | struct ordered_event *new; | 526 | struct ordered_event *new; |
@@ -543,7 +538,7 @@ int perf_session_queue_event(struct perf_session *s, union perf_event *event, | |||
543 | 538 | ||
544 | new = ordered_events__new(oe, timestamp, event); | 539 | new = ordered_events__new(oe, timestamp, event); |
545 | if (!new) { | 540 | if (!new) { |
546 | ordered_events__flush(oe, machines, evlist, tool, OE_FLUSH__HALF); | 541 | ordered_events__flush(oe, OE_FLUSH__HALF); |
547 | new = ordered_events__new(oe, timestamp, event); | 542 | new = ordered_events__new(oe, timestamp, event); |
548 | } | 543 | } |
549 | 544 | ||
@@ -948,9 +943,9 @@ int machines__deliver_event(struct machines *machines, | |||
948 | 943 | ||
949 | static s64 perf_session__process_user_event(struct perf_session *session, | 944 | static s64 perf_session__process_user_event(struct perf_session *session, |
950 | union perf_event *event, | 945 | union perf_event *event, |
951 | struct perf_tool *tool, | ||
952 | u64 file_offset) | 946 | u64 file_offset) |
953 | { | 947 | { |
948 | struct perf_tool *tool = session->ordered_events.tool; | ||
954 | int fd = perf_data_file__fd(session->file); | 949 | int fd = perf_data_file__fd(session->file); |
955 | int err; | 950 | int err; |
956 | 951 | ||
@@ -988,15 +983,15 @@ static s64 perf_session__process_user_event(struct perf_session *session, | |||
988 | 983 | ||
989 | int perf_session__deliver_synth_event(struct perf_session *session, | 984 | int perf_session__deliver_synth_event(struct perf_session *session, |
990 | union perf_event *event, | 985 | union perf_event *event, |
991 | struct perf_sample *sample, | 986 | struct perf_sample *sample) |
992 | struct perf_tool *tool) | ||
993 | { | 987 | { |
994 | struct perf_evlist *evlist = session->evlist; | 988 | struct perf_evlist *evlist = session->evlist; |
989 | struct perf_tool *tool = session->ordered_events.tool; | ||
995 | 990 | ||
996 | events_stats__inc(&evlist->stats, event->header.type); | 991 | events_stats__inc(&evlist->stats, event->header.type); |
997 | 992 | ||
998 | if (event->header.type >= PERF_RECORD_USER_TYPE_START) | 993 | if (event->header.type >= PERF_RECORD_USER_TYPE_START) |
999 | return perf_session__process_user_event(session, event, tool, 0); | 994 | return perf_session__process_user_event(session, event, 0); |
1000 | 995 | ||
1001 | return machines__deliver_event(&session->machines, evlist, event, sample, tool, 0); | 996 | return machines__deliver_event(&session->machines, evlist, event, sample, tool, 0); |
1002 | } | 997 | } |
@@ -1066,11 +1061,10 @@ out_parse_sample: | |||
1066 | } | 1061 | } |
1067 | 1062 | ||
1068 | static s64 perf_session__process_event(struct perf_session *session, | 1063 | static s64 perf_session__process_event(struct perf_session *session, |
1069 | union perf_event *event, | 1064 | union perf_event *event, u64 file_offset) |
1070 | struct perf_tool *tool, | ||
1071 | u64 file_offset) | ||
1072 | { | 1065 | { |
1073 | struct perf_evlist *evlist = session->evlist; | 1066 | struct perf_evlist *evlist = session->evlist; |
1067 | struct perf_tool *tool = session->ordered_events.tool; | ||
1074 | struct perf_sample sample; | 1068 | struct perf_sample sample; |
1075 | int ret; | 1069 | int ret; |
1076 | 1070 | ||
@@ -1083,7 +1077,7 @@ static s64 perf_session__process_event(struct perf_session *session, | |||
1083 | events_stats__inc(&evlist->stats, event->header.type); | 1077 | events_stats__inc(&evlist->stats, event->header.type); |
1084 | 1078 | ||
1085 | if (event->header.type >= PERF_RECORD_USER_TYPE_START) | 1079 | if (event->header.type >= PERF_RECORD_USER_TYPE_START) |
1086 | return perf_session__process_user_event(session, event, tool, file_offset); | 1080 | return perf_session__process_user_event(session, event, file_offset); |
1087 | 1081 | ||
1088 | /* | 1082 | /* |
1089 | * For all kernel events we get the sample data | 1083 | * For all kernel events we get the sample data |
@@ -1093,8 +1087,7 @@ static s64 perf_session__process_event(struct perf_session *session, | |||
1093 | return ret; | 1087 | return ret; |
1094 | 1088 | ||
1095 | if (tool->ordered_events) { | 1089 | if (tool->ordered_events) { |
1096 | ret = perf_session_queue_event(session, event, tool, &sample, | 1090 | ret = perf_session__queue_event(session, event, &sample, file_offset); |
1097 | file_offset); | ||
1098 | if (ret != -ETIME) | 1091 | if (ret != -ETIME) |
1099 | return ret; | 1092 | return ret; |
1100 | } | 1093 | } |
@@ -1173,12 +1166,10 @@ static void perf_tool__warn_about_errors(const struct perf_tool *tool, | |||
1173 | 1166 | ||
1174 | volatile int session_done; | 1167 | volatile int session_done; |
1175 | 1168 | ||
1176 | static int __perf_session__process_pipe_events(struct perf_session *session, | 1169 | static int __perf_session__process_pipe_events(struct perf_session *session) |
1177 | struct perf_tool *tool) | ||
1178 | { | 1170 | { |
1179 | struct ordered_events *oe = &session->ordered_events; | 1171 | struct ordered_events *oe = &session->ordered_events; |
1180 | struct perf_evlist *evlist = session->evlist; | 1172 | struct perf_tool *tool = oe->tool; |
1181 | struct machines *machines = &session->machines; | ||
1182 | int fd = perf_data_file__fd(session->file); | 1173 | int fd = perf_data_file__fd(session->file); |
1183 | union perf_event *event; | 1174 | union perf_event *event; |
1184 | uint32_t size, cur_size = 0; | 1175 | uint32_t size, cur_size = 0; |
@@ -1242,7 +1233,7 @@ more: | |||
1242 | } | 1233 | } |
1243 | } | 1234 | } |
1244 | 1235 | ||
1245 | if ((skip = perf_session__process_event(session, event, tool, head)) < 0) { | 1236 | if ((skip = perf_session__process_event(session, event, head)) < 0) { |
1246 | pr_err("%#" PRIx64 " [%#x]: failed to process type: %d\n", | 1237 | pr_err("%#" PRIx64 " [%#x]: failed to process type: %d\n", |
1247 | head, event->header.size, event->header.type); | 1238 | head, event->header.size, event->header.type); |
1248 | err = -EINVAL; | 1239 | err = -EINVAL; |
@@ -1258,7 +1249,7 @@ more: | |||
1258 | goto more; | 1249 | goto more; |
1259 | done: | 1250 | done: |
1260 | /* do the final flush for ordered samples */ | 1251 | /* do the final flush for ordered samples */ |
1261 | err = ordered_events__flush(oe, machines, evlist, tool, OE_FLUSH__FINAL); | 1252 | err = ordered_events__flush(oe, OE_FLUSH__FINAL); |
1262 | out_err: | 1253 | out_err: |
1263 | free(buf); | 1254 | free(buf); |
1264 | perf_tool__warn_about_errors(tool, &session->evlist->stats); | 1255 | perf_tool__warn_about_errors(tool, &session->evlist->stats); |
@@ -1308,11 +1299,10 @@ fetch_mmaped_event(struct perf_session *session, | |||
1308 | 1299 | ||
1309 | static int __perf_session__process_events(struct perf_session *session, | 1300 | static int __perf_session__process_events(struct perf_session *session, |
1310 | u64 data_offset, u64 data_size, | 1301 | u64 data_offset, u64 data_size, |
1311 | u64 file_size, struct perf_tool *tool) | 1302 | u64 file_size) |
1312 | { | 1303 | { |
1313 | struct ordered_events *oe = &session->ordered_events; | 1304 | struct ordered_events *oe = &session->ordered_events; |
1314 | struct perf_evlist *evlist = session->evlist; | 1305 | struct perf_tool *tool = oe->tool; |
1315 | struct machines *machines = &session->machines; | ||
1316 | int fd = perf_data_file__fd(session->file); | 1306 | int fd = perf_data_file__fd(session->file); |
1317 | u64 head, page_offset, file_offset, file_pos, size; | 1307 | u64 head, page_offset, file_offset, file_pos, size; |
1318 | int err, mmap_prot, mmap_flags, map_idx = 0; | 1308 | int err, mmap_prot, mmap_flags, map_idx = 0; |
@@ -1381,8 +1371,7 @@ more: | |||
1381 | size = event->header.size; | 1371 | size = event->header.size; |
1382 | 1372 | ||
1383 | if (size < sizeof(struct perf_event_header) || | 1373 | if (size < sizeof(struct perf_event_header) || |
1384 | (skip = perf_session__process_event(session, event, tool, file_pos)) | 1374 | (skip = perf_session__process_event(session, event, file_pos)) < 0) { |
1385 | < 0) { | ||
1386 | pr_err("%#" PRIx64 " [%#x]: failed to process type: %d\n", | 1375 | pr_err("%#" PRIx64 " [%#x]: failed to process type: %d\n", |
1387 | file_offset + head, event->header.size, | 1376 | file_offset + head, event->header.size, |
1388 | event->header.type); | 1377 | event->header.type); |
@@ -1406,7 +1395,7 @@ more: | |||
1406 | 1395 | ||
1407 | out: | 1396 | out: |
1408 | /* do the final flush for ordered samples */ | 1397 | /* do the final flush for ordered samples */ |
1409 | err = ordered_events__flush(oe, machines, evlist, tool, OE_FLUSH__FINAL); | 1398 | err = ordered_events__flush(oe, OE_FLUSH__FINAL); |
1410 | out_err: | 1399 | out_err: |
1411 | ui_progress__finish(); | 1400 | ui_progress__finish(); |
1412 | perf_tool__warn_about_errors(tool, &session->evlist->stats); | 1401 | perf_tool__warn_about_errors(tool, &session->evlist->stats); |
@@ -1415,8 +1404,7 @@ out_err: | |||
1415 | return err; | 1404 | return err; |
1416 | } | 1405 | } |
1417 | 1406 | ||
1418 | int perf_session__process_events(struct perf_session *session, | 1407 | int perf_session__process_events(struct perf_session *session) |
1419 | struct perf_tool *tool) | ||
1420 | { | 1408 | { |
1421 | u64 size = perf_data_file__size(session->file); | 1409 | u64 size = perf_data_file__size(session->file); |
1422 | int err; | 1410 | int err; |
@@ -1427,10 +1415,9 @@ int perf_session__process_events(struct perf_session *session, | |||
1427 | if (!perf_data_file__is_pipe(session->file)) | 1415 | if (!perf_data_file__is_pipe(session->file)) |
1428 | err = __perf_session__process_events(session, | 1416 | err = __perf_session__process_events(session, |
1429 | session->header.data_offset, | 1417 | session->header.data_offset, |
1430 | session->header.data_size, | 1418 | session->header.data_size, size); |
1431 | size, tool); | ||
1432 | else | 1419 | else |
1433 | err = __perf_session__process_pipe_events(session, tool); | 1420 | err = __perf_session__process_pipe_events(session); |
1434 | 1421 | ||
1435 | return err; | 1422 | return err; |
1436 | } | 1423 | } |
diff --git a/tools/perf/util/session.h b/tools/perf/util/session.h index c08fa6be5bf3..06e0777e9803 100644 --- a/tools/perf/util/session.h +++ b/tools/perf/util/session.h | |||
@@ -48,12 +48,10 @@ int perf_session__peek_event(struct perf_session *session, off_t file_offset, | |||
48 | union perf_event **event_ptr, | 48 | union perf_event **event_ptr, |
49 | struct perf_sample *sample); | 49 | struct perf_sample *sample); |
50 | 50 | ||
51 | int perf_session__process_events(struct perf_session *session, | 51 | int perf_session__process_events(struct perf_session *session); |
52 | struct perf_tool *tool); | ||
53 | 52 | ||
54 | int perf_session_queue_event(struct perf_session *s, union perf_event *event, | 53 | int perf_session__queue_event(struct perf_session *s, union perf_event *event, |
55 | struct perf_tool *tool, struct perf_sample *sample, | 54 | struct perf_sample *sample, u64 file_offset); |
56 | u64 file_offset); | ||
57 | 55 | ||
58 | void perf_tool__fill_defaults(struct perf_tool *tool); | 56 | void perf_tool__fill_defaults(struct perf_tool *tool); |
59 | 57 | ||
@@ -126,8 +124,7 @@ extern volatile int session_done; | |||
126 | 124 | ||
127 | int perf_session__deliver_synth_event(struct perf_session *session, | 125 | int perf_session__deliver_synth_event(struct perf_session *session, |
128 | union perf_event *event, | 126 | union perf_event *event, |
129 | struct perf_sample *sample, | 127 | struct perf_sample *sample); |
130 | struct perf_tool *tool); | ||
131 | 128 | ||
132 | int perf_event__process_id_index(struct perf_tool *tool, | 129 | int perf_event__process_id_index(struct perf_tool *tool, |
133 | union perf_event *event, | 130 | union perf_event *event, |