Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

+68 -83
+1 -1
tools/perf/builtin-annotate.c
··· 208 208 goto out; 209 209 } 210 210 211 - ret = perf_session__process_events(session, &ann->tool); 211 + ret = perf_session__process_events(session); 212 212 if (ret) 213 213 goto out; 214 214
+1 -1
tools/perf/builtin-buildid-list.c
··· 74 74 * the record stream. Buildids are stored as RECORD_HEADER_BUILD_ID 75 75 */ 76 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 79 perf_session__fprintf_dsos_buildid(session, stdout, dso__skip_buildid, with_hits); 80 80 perf_session__delete(session);
+1 -1
tools/perf/builtin-diff.c
··· 747 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 751 if (ret) { 752 752 pr_err("Failed to process %s\n", d->file.path); 753 753 goto out_delete;
+3 -3
tools/perf/builtin-inject.c
··· 359 359 } else if (inject->sched_stat) { 360 360 struct perf_evsel *evsel; 361 361 362 - inject->tool.ordered_events = true; 363 - 364 362 evlist__for_each(session->evlist, evsel) { 365 363 const char *name = perf_evsel__name(evsel); 366 364 ··· 377 379 if (!file_out->is_pipe) 378 380 lseek(fd, session->header.data_offset, SEEK_SET); 379 381 380 - ret = perf_session__process_events(session, &inject->tool); 382 + ret = perf_session__process_events(session); 381 383 382 384 if (!file_out->is_pipe) { 383 385 if (inject->build_ids) ··· 455 457 perror("failed to create output file"); 456 458 return -1; 457 459 } 460 + 461 + inject.tool.ordered_events = inject.sched_stat; 458 462 459 463 file.path = inject.input_name; 460 464 inject.session = perf_session__new(&file, true, &inject.tool);
+1 -1
tools/perf/builtin-kmem.c
··· 426 426 } 427 427 428 428 setup_pager(); 429 - err = perf_session__process_events(session, &perf_kmem); 429 + err = perf_session__process_events(session); 430 430 if (err != 0) 431 431 goto out; 432 432 sort_result();
+3 -3
tools/perf/builtin-kvm.c
··· 730 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 736 * point to it, and it'll get possibly overwritten by the kernel. 737 737 */ 738 738 perf_evlist__mmap_consume(kvm->evlist, idx); ··· 1066 1066 if (ret < 0) 1067 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 1072 static int parse_target_str(struct perf_kvm_stat *kvm)
+1 -1
tools/perf/builtin-lock.c
··· 878 878 if (select_key()) 879 879 goto out_delete; 880 880 881 - err = perf_session__process_events(session, &eops); 881 + err = perf_session__process_events(session); 882 882 if (err) 883 883 goto out_delete; 884 884
+1 -1
tools/perf/builtin-mem.c
··· 141 141 142 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 145 if (err) 146 146 return err; 147 147
+2 -2
tools/perf/builtin-record.c
··· 225 225 */ 226 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 231 static void perf_event__synthesize_guest_os(struct machine *machine, void *data) ··· 343 343 signal(SIGINT, sig_handler); 344 344 signal(SIGTERM, sig_handler); 345 345 346 - session = perf_session__new(file, false, NULL); 346 + session = perf_session__new(file, false, tool); 347 347 if (session == NULL) { 348 348 pr_err("Perf session creation failed.\n"); 349 349 return -1;
+1 -1
tools/perf/builtin-report.c
··· 482 482 if (ret) 483 483 return ret; 484 484 485 - ret = perf_session__process_events(session, &rep->tool); 485 + ret = perf_session__process_events(session); 486 486 if (ret) 487 487 return ret; 488 488
+1 -1
tools/perf/builtin-sched.c
··· 1467 1467 goto out_delete; 1468 1468 1469 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 1471 if (err) { 1472 1472 pr_err("Failed to process events, error %d", err); 1473 1473 goto out_delete;
+1 -1
tools/perf/builtin-script.c
··· 800 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 805 if (debug_mode) 806 806 pr_err("Misordered timestamps: %" PRIu64 "\n", nr_unordered);
+1 -1
tools/perf/builtin-timechart.c
··· 1623 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 1627 if (ret) 1628 1628 goto out_delete; 1629 1629
+1 -1
tools/perf/builtin-trace.c
··· 2408 2408 2409 2409 setup_pager(); 2410 2410 2411 - err = perf_session__process_events(session, &trace->tool); 2411 + err = perf_session__process_events(session); 2412 2412 if (err) 2413 2413 pr_err("Failed to process events, error %d", err); 2414 2414
+2 -2
tools/perf/util/data-convert-bt.c
··· 579 579 return -1; 580 580 581 581 /* perf.data session */ 582 - session = perf_session__new(&file, 0, NULL); 582 + session = perf_session__new(&file, 0, &c.tool); 583 583 if (!session) 584 584 goto free_writer; 585 585 ··· 591 591 if (setup_events(cw, session)) 592 592 goto free_session; 593 593 594 - err = perf_session__process_events(session, &c.tool); 594 + err = perf_session__process_events(session); 595 595 if (!err) 596 596 err = bt_ctf_stream_flush(cw->stream); 597 597
+11 -12
tools/perf/util/ordered-events.c
··· 153 153 free_dup_event(oe, event->event); 154 154 } 155 155 156 - static int __ordered_events__flush(struct ordered_events *oe, 157 - struct machines *machines, 158 - struct perf_evlist *evlist, 159 - struct perf_tool *tool) 156 + static int __ordered_events__flush(struct ordered_events *oe) 160 157 { 161 158 struct list_head *head = &oe->events; 162 159 struct ordered_event *tmp, *iter; ··· 177 180 if (iter->timestamp > limit) 178 181 break; 179 182 180 - ret = perf_evlist__parse_sample(evlist, iter->event, &sample); 183 + ret = perf_evlist__parse_sample(oe->evlist, iter->event, &sample); 181 184 if (ret) 182 185 pr_err("Can't parse sample, err = %d\n", ret); 183 186 else { 184 - ret = machines__deliver_event(machines, evlist, iter->event, 185 - &sample, tool, iter->file_offset); 187 + ret = machines__deliver_event(oe->machines, oe->evlist, iter->event, 188 + &sample, oe->tool, iter->file_offset); 186 189 if (ret) 187 190 return ret; 188 191 } ··· 202 205 return 0; 203 206 } 204 207 205 - int ordered_events__flush(struct ordered_events *oe, struct machines *machines, 206 - struct perf_evlist *evlist, struct perf_tool *tool, 207 - enum oe_flush how) 208 + int ordered_events__flush(struct ordered_events *oe, enum oe_flush how) 208 209 { 209 210 static const char * const str[] = { 210 211 "NONE", ··· 247 252 str[how], oe->nr_events); 248 253 pr_oe_time(oe->max_timestamp, "max_timestamp\n"); 249 254 250 - err = __ordered_events__flush(oe, machines, evlist, tool); 255 + err = __ordered_events__flush(oe); 251 256 252 257 if (!err) { 253 258 if (how == OE_FLUSH__ROUND) ··· 263 268 return err; 264 269 } 265 270 266 - void ordered_events__init(struct ordered_events *oe) 271 + void ordered_events__init(struct ordered_events *oe, struct machines *machines, 272 + struct perf_evlist *evlist, struct perf_tool *tool) 267 273 { 268 274 INIT_LIST_HEAD(&oe->events); 269 275 INIT_LIST_HEAD(&oe->cache); 270 276 INIT_LIST_HEAD(&oe->to_free); 271 277 oe->max_alloc_size = (u64) -1; 272 278 oe->cur_alloc_size = 0; 279 + oe->evlist = evlist; 280 + oe->machines = machines; 281 + oe->tool = tool; 273 282 } 274 283 275 284 void ordered_events__free(struct ordered_events *oe)
+6 -4
tools/perf/util/ordered-events.h
··· 32 32 struct list_head to_free; 33 33 struct ordered_event *buffer; 34 34 struct ordered_event *last; 35 + struct machines *machines; 36 + struct perf_evlist *evlist; 37 + struct perf_tool *tool; 35 38 int buffer_idx; 36 39 unsigned int nr_events; 37 40 enum oe_flush last_flush_type; ··· 44 41 struct ordered_event *ordered_events__new(struct ordered_events *oe, u64 timestamp, 45 42 union perf_event *event); 46 43 void ordered_events__delete(struct ordered_events *oe, struct ordered_event *event); 47 - int ordered_events__flush(struct ordered_events *oe, struct machines *machines, 48 - struct perf_evlist *evlist, struct perf_tool *tool, 49 - enum oe_flush how); 50 - void ordered_events__init(struct ordered_events *oe); 44 + int ordered_events__flush(struct ordered_events *oe, enum oe_flush how); 45 + void ordered_events__init(struct ordered_events *oe, struct machines *machines, 46 + struct perf_evlist *evlsit, struct perf_tool *tool); 51 47 void ordered_events__free(struct ordered_events *oe); 52 48 53 49 static inline
+26 -39
tools/perf/util/session.c
··· 95 95 goto out; 96 96 97 97 session->repipe = repipe; 98 - ordered_events__init(&session->ordered_events); 99 98 machines__init(&session->machines); 100 99 101 100 if (file) { ··· 125 126 tool->ordered_events && !perf_evlist__sample_id_all(session->evlist)) { 126 127 dump_printf("WARNING: No sample_id_all support, falling back to unordered processing\n"); 127 128 tool->ordered_events = false; 128 - } 129 + } else 130 + ordered_events__init(&session->ordered_events, &session->machines, session->evlist, tool); 129 131 130 132 return session; 131 133 ··· 508 508 * Flush every events below timestamp 7 509 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 512 union perf_event *event __maybe_unused, 513 513 struct perf_session *session) 514 514 { 515 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, 523 - struct perf_tool *tool, struct perf_sample *sample, 524 - u64 file_offset) 520 + int perf_session__queue_event(struct perf_session *s, union perf_event *event, 521 + struct perf_sample *sample, u64 file_offset) 525 522 { 526 523 struct ordered_events *oe = &s->ordered_events; 527 - struct perf_evlist *evlist = s->evlist; 528 - struct machines *machines = &s->machines; 529 524 530 525 u64 timestamp = sample->time; 531 526 struct ordered_event *new; ··· 538 543 539 544 new = ordered_events__new(oe, timestamp, event); 540 545 if (!new) { 541 - ordered_events__flush(oe, machines, evlist, tool, OE_FLUSH__HALF); 546 + ordered_events__flush(oe, OE_FLUSH__HALF); 542 547 new = ordered_events__new(oe, timestamp, event); 543 548 } 544 549 ··· 943 948 944 949 static s64 perf_session__process_user_event(struct perf_session *session, 945 950 union perf_event *event, 946 - struct perf_tool *tool, 947 951 u64 file_offset) 948 952 { 953 + struct perf_tool *tool = session->ordered_events.tool; 949 954 int fd = perf_data_file__fd(session->file); 950 955 int err; 951 956 ··· 983 988 984 989 int perf_session__deliver_synth_event(struct perf_session *session, 985 990 union perf_event *event, 986 - struct perf_sample *sample, 987 - struct perf_tool *tool) 991 + struct perf_sample *sample) 988 992 { 989 993 struct perf_evlist *evlist = session->evlist; 994 + struct perf_tool *tool = session->ordered_events.tool; 990 995 991 996 events_stats__inc(&evlist->stats, event->header.type); 992 997 993 998 if (event->header.type >= PERF_RECORD_USER_TYPE_START) 994 - return perf_session__process_user_event(session, event, tool, 0); 999 + return perf_session__process_user_event(session, event, 0); 995 1000 996 1001 return machines__deliver_event(&session->machines, evlist, event, sample, tool, 0); 997 1002 } ··· 1061 1066 } 1062 1067 1063 1068 static s64 perf_session__process_event(struct perf_session *session, 1064 - union perf_event *event, 1065 - struct perf_tool *tool, 1066 - u64 file_offset) 1069 + union perf_event *event, u64 file_offset) 1067 1070 { 1068 1071 struct perf_evlist *evlist = session->evlist; 1072 + struct perf_tool *tool = session->ordered_events.tool; 1069 1073 struct perf_sample sample; 1070 1074 int ret; 1071 1075 ··· 1077 1083 events_stats__inc(&evlist->stats, event->header.type); 1078 1084 1079 1085 if (event->header.type >= PERF_RECORD_USER_TYPE_START) 1080 - return perf_session__process_user_event(session, event, tool, file_offset); 1086 + return perf_session__process_user_event(session, event, file_offset); 1081 1087 1082 1088 /* 1083 1089 * For all kernel events we get the sample data ··· 1087 1093 return ret; 1088 1094 1089 1095 if (tool->ordered_events) { 1090 - ret = perf_session_queue_event(session, event, tool, &sample, 1091 - file_offset); 1096 + ret = perf_session__queue_event(session, event, &sample, file_offset); 1092 1097 if (ret != -ETIME) 1093 1098 return ret; 1094 1099 } ··· 1166 1173 1167 1174 volatile int session_done; 1168 1175 1169 - static int __perf_session__process_pipe_events(struct perf_session *session, 1170 - struct perf_tool *tool) 1176 + static int __perf_session__process_pipe_events(struct perf_session *session) 1171 1177 { 1172 1178 struct ordered_events *oe = &session->ordered_events; 1173 - struct perf_evlist *evlist = session->evlist; 1174 - struct machines *machines = &session->machines; 1179 + struct perf_tool *tool = oe->tool; 1175 1180 int fd = perf_data_file__fd(session->file); 1176 1181 union perf_event *event; 1177 1182 uint32_t size, cur_size = 0; ··· 1233 1242 } 1234 1243 } 1235 1244 1236 - if ((skip = perf_session__process_event(session, event, tool, head)) < 0) { 1245 + if ((skip = perf_session__process_event(session, event, head)) < 0) { 1237 1246 pr_err("%#" PRIx64 " [%#x]: failed to process type: %d\n", 1238 1247 head, event->header.size, event->header.type); 1239 1248 err = -EINVAL; ··· 1249 1258 goto more; 1250 1259 done: 1251 1260 /* do the final flush for ordered samples */ 1252 - err = ordered_events__flush(oe, machines, evlist, tool, OE_FLUSH__FINAL); 1261 + err = ordered_events__flush(oe, OE_FLUSH__FINAL); 1253 1262 out_err: 1254 1263 free(buf); 1255 1264 perf_tool__warn_about_errors(tool, &session->evlist->stats); ··· 1299 1308 1300 1309 static int __perf_session__process_events(struct perf_session *session, 1301 1310 u64 data_offset, u64 data_size, 1302 - u64 file_size, struct perf_tool *tool) 1311 + u64 file_size) 1303 1312 { 1304 1313 struct ordered_events *oe = &session->ordered_events; 1305 - struct perf_evlist *evlist = session->evlist; 1306 - struct machines *machines = &session->machines; 1314 + struct perf_tool *tool = oe->tool; 1307 1315 int fd = perf_data_file__fd(session->file); 1308 1316 u64 head, page_offset, file_offset, file_pos, size; 1309 1317 int err, mmap_prot, mmap_flags, map_idx = 0; ··· 1371 1381 size = event->header.size; 1372 1382 1373 1383 if (size < sizeof(struct perf_event_header) || 1374 - (skip = perf_session__process_event(session, event, tool, file_pos)) 1375 - < 0) { 1384 + (skip = perf_session__process_event(session, event, file_pos)) < 0) { 1376 1385 pr_err("%#" PRIx64 " [%#x]: failed to process type: %d\n", 1377 1386 file_offset + head, event->header.size, 1378 1387 event->header.type); ··· 1395 1406 1396 1407 out: 1397 1408 /* do the final flush for ordered samples */ 1398 - err = ordered_events__flush(oe, machines, evlist, tool, OE_FLUSH__FINAL); 1409 + err = ordered_events__flush(oe, OE_FLUSH__FINAL); 1399 1410 out_err: 1400 1411 ui_progress__finish(); 1401 1412 perf_tool__warn_about_errors(tool, &session->evlist->stats); ··· 1404 1415 return err; 1405 1416 } 1406 1417 1407 - int perf_session__process_events(struct perf_session *session, 1408 - struct perf_tool *tool) 1418 + int perf_session__process_events(struct perf_session *session) 1409 1419 { 1410 1420 u64 size = perf_data_file__size(session->file); 1411 1421 int err; ··· 1415 1427 if (!perf_data_file__is_pipe(session->file)) 1416 1428 err = __perf_session__process_events(session, 1417 1429 session->header.data_offset, 1418 - session->header.data_size, 1419 - size, tool); 1430 + session->header.data_size, size); 1420 1431 else 1421 - err = __perf_session__process_pipe_events(session, tool); 1432 + err = __perf_session__process_pipe_events(session); 1422 1433 1423 1434 return err; 1424 1435 }
+4 -7
tools/perf/util/session.h
··· 48 48 union perf_event **event_ptr, 49 49 struct perf_sample *sample); 50 50 51 - int perf_session__process_events(struct perf_session *session, 52 - struct perf_tool *tool); 51 + int perf_session__process_events(struct perf_session *session); 53 52 54 - int perf_session_queue_event(struct perf_session *s, union perf_event *event, 55 - struct perf_tool *tool, struct perf_sample *sample, 56 - u64 file_offset); 53 + int perf_session__queue_event(struct perf_session *s, union perf_event *event, 54 + struct perf_sample *sample, u64 file_offset); 57 55 58 56 void perf_tool__fill_defaults(struct perf_tool *tool); 59 57 ··· 124 126 125 127 int perf_session__deliver_synth_event(struct perf_session *session, 126 128 union perf_event *event, 127 - struct perf_sample *sample, 128 - struct perf_tool *tool); 129 + struct perf_sample *sample); 129 130 130 131 int perf_event__process_id_index(struct perf_tool *tool, 131 132 union perf_event *event,