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

perf ordered_events: Untangle from perf_session

For use by tools that are not perf.data based, as maybe 'perf trace' in
live mode.

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-nedqe7cmii5w82etfi36urfz@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

+42 -23
+9 -8
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 perf_session *s, 156 + static int __ordered_events__flush(struct ordered_events *oe, 157 + struct machines *machines, 158 + struct perf_evlist *evlist, 157 159 struct perf_tool *tool) 158 160 { 159 - struct ordered_events *oe = &s->ordered_events; 160 161 struct list_head *head = &oe->events; 161 162 struct ordered_event *tmp, *iter; 162 163 struct perf_sample sample; ··· 180 179 if (iter->timestamp > limit) 181 180 break; 182 181 183 - ret = perf_evlist__parse_sample(s->evlist, iter->event, &sample); 182 + ret = perf_evlist__parse_sample(evlist, iter->event, &sample); 184 183 if (ret) 185 184 pr_err("Can't parse sample, err = %d\n", ret); 186 185 else { 187 - ret = perf_session__deliver_event(s, iter->event, &sample, tool, 188 - iter->file_offset); 186 + ret = machines__deliver_event(machines, evlist, iter->event, 187 + &sample, tool, iter->file_offset); 189 188 if (ret) 190 189 return ret; 191 190 } ··· 205 204 return 0; 206 205 } 207 206 208 - int ordered_events__flush(struct perf_session *s, struct perf_tool *tool, 207 + int ordered_events__flush(struct ordered_events *oe, struct machines *machines, 208 + struct perf_evlist *evlist, struct perf_tool *tool, 209 209 enum oe_flush how) 210 210 { 211 - struct ordered_events *oe = &s->ordered_events; 212 211 static const char * const str[] = { 213 212 "NONE", 214 213 "FINAL", ··· 252 251 str[how], oe->nr_events); 253 252 pr_oe_time(oe->max_timestamp, "max_timestamp\n"); 254 253 255 - err = __ordered_events__flush(s, tool); 254 + err = __ordered_events__flush(oe, machines, evlist, tool); 256 255 257 256 if (!err) { 258 257 if (how == OE_FLUSH__ROUND)
+5 -3
tools/perf/util/ordered-events.h
··· 2 2 #define __ORDERED_EVENTS_H 3 3 4 4 #include <linux/types.h> 5 - #include "tool.h" 6 5 7 - struct perf_session; 6 + struct perf_tool; 7 + struct perf_evlist; 8 + struct machines; 8 9 9 10 struct ordered_event { 10 11 u64 timestamp; ··· 41 40 struct ordered_event *ordered_events__new(struct ordered_events *oe, u64 timestamp, 42 41 union perf_event *event); 43 42 void ordered_events__delete(struct ordered_events *oe, struct ordered_event *event); 44 - int ordered_events__flush(struct perf_session *s, struct perf_tool *tool, 43 + int ordered_events__flush(struct ordered_events *oe, struct machines *machines, 44 + struct perf_evlist *evlist, struct perf_tool *tool, 45 45 enum oe_flush how); 46 46 void ordered_events__init(struct ordered_events *oe); 47 47 void ordered_events__free(struct ordered_events *oe);
+26 -11
tools/perf/util/session.c
··· 512 512 union perf_event *event __maybe_unused, 513 513 struct perf_session *session) 514 514 { 515 - return ordered_events__flush(session, tool, OE_FLUSH__ROUND); 515 + struct ordered_events *oe = &session->ordered_events; 516 + struct perf_evlist *evlist = session->evlist; 517 + struct machines *machines = &session->machines; 518 + 519 + return ordered_events__flush(oe, machines, evlist, tool, OE_FLUSH__ROUND); 516 520 } 517 521 518 522 int perf_session_queue_event(struct perf_session *s, union perf_event *event, ··· 524 520 u64 file_offset) 525 521 { 526 522 struct ordered_events *oe = &s->ordered_events; 523 + struct perf_evlist *evlist = s->evlist; 524 + struct machines *machines = &s->machines; 525 + 527 526 u64 timestamp = sample->time; 528 527 struct ordered_event *new; 529 528 ··· 543 536 544 537 new = ordered_events__new(oe, timestamp, event); 545 538 if (!new) { 546 - ordered_events__flush(s, tool, OE_FLUSH__HALF); 539 + ordered_events__flush(oe, machines, evlist, tool, OE_FLUSH__HALF); 547 540 new = ordered_events__new(oe, timestamp, event); 548 541 } 549 542 ··· 893 886 &sample->read.one, machine); 894 887 } 895 888 896 - int perf_session__deliver_event(struct perf_session *session, 889 + int machines__deliver_event(struct machines *machines, 890 + struct perf_evlist *evlist, 897 891 union perf_event *event, 898 892 struct perf_sample *sample, 899 893 struct perf_tool *tool, u64 file_offset) 900 894 { 901 - struct perf_evlist *evlist = session->evlist; 902 895 struct perf_evsel *evsel; 903 896 struct machine *machine; 904 897 ··· 906 899 907 900 evsel = perf_evlist__id2evsel(evlist, sample->id); 908 901 909 - machine = machines__find_for_cpumode(&session->machines, event, sample); 902 + machine = machines__find_for_cpumode(machines, event, sample); 910 903 911 904 switch (event->header.type) { 912 905 case PERF_RECORD_SAMPLE: ··· 991 984 struct perf_sample *sample, 992 985 struct perf_tool *tool) 993 986 { 994 - events_stats__inc(&session->evlist->stats, event->header.type); 987 + struct perf_evlist *evlist = session->evlist; 988 + 989 + events_stats__inc(&evlist->stats, event->header.type); 995 990 996 991 if (event->header.type >= PERF_RECORD_USER_TYPE_START) 997 992 return perf_session__process_user_event(session, event, tool, 0); 998 993 999 - return perf_session__deliver_event(session, event, sample, tool, 0); 994 + return machines__deliver_event(&session->machines, evlist, event, sample, tool, 0); 1000 995 } 1001 996 1002 997 static void event_swap(union perf_event *event, bool sample_id_all) ··· 1099 1090 return ret; 1100 1091 } 1101 1092 1102 - return perf_session__deliver_event(session, event, &sample, tool, 1103 - file_offset); 1093 + return machines__deliver_event(&session->machines, evlist, event, 1094 + &sample, tool, file_offset); 1104 1095 } 1105 1096 1106 1097 void perf_event_header__bswap(struct perf_event_header *hdr) ··· 1176 1167 static int __perf_session__process_pipe_events(struct perf_session *session, 1177 1168 struct perf_tool *tool) 1178 1169 { 1170 + struct ordered_events *oe = &session->ordered_events; 1171 + struct perf_evlist *evlist = session->evlist; 1172 + struct machines *machines = &session->machines; 1179 1173 int fd = perf_data_file__fd(session->file); 1180 1174 union perf_event *event; 1181 1175 uint32_t size, cur_size = 0; ··· 1258 1246 goto more; 1259 1247 done: 1260 1248 /* do the final flush for ordered samples */ 1261 - err = ordered_events__flush(session, tool, OE_FLUSH__FINAL); 1249 + err = ordered_events__flush(oe, machines, evlist, tool, OE_FLUSH__FINAL); 1262 1250 out_err: 1263 1251 free(buf); 1264 1252 perf_tool__warn_about_errors(tool, &session->evlist->stats); ··· 1310 1298 u64 data_offset, u64 data_size, 1311 1299 u64 file_size, struct perf_tool *tool) 1312 1300 { 1301 + struct ordered_events *oe = &session->ordered_events; 1302 + struct perf_evlist *evlist = session->evlist; 1303 + struct machines *machines = &session->machines; 1313 1304 int fd = perf_data_file__fd(session->file); 1314 1305 u64 head, page_offset, file_offset, file_pos, size; 1315 1306 int err, mmap_prot, mmap_flags, map_idx = 0; ··· 1406 1391 1407 1392 out: 1408 1393 /* do the final flush for ordered samples */ 1409 - err = ordered_events__flush(session, tool, OE_FLUSH__FINAL); 1394 + err = ordered_events__flush(oe, machines, evlist, tool, OE_FLUSH__FINAL); 1410 1395 out_err: 1411 1396 ui_progress__finish(); 1412 1397 perf_tool__warn_about_errors(tool, &session->evlist->stats);
+2 -1
tools/perf/util/session.h
··· 57 57 58 58 void perf_tool__fill_defaults(struct perf_tool *tool); 59 59 60 - int perf_session__deliver_event(struct perf_session *session, 60 + int machines__deliver_event(struct machines *machines, 61 + struct perf_evlist *evlist, 61 62 union perf_event *event, 62 63 struct perf_sample *sample, 63 64 struct perf_tool *tool, u64 file_offset);