diff options
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/perf/builtin-annotate.c | 2 | ||||
| -rw-r--r-- | tools/perf/builtin-diff.c | 4 | ||||
| -rw-r--r-- | tools/perf/builtin-inject.c | 6 | ||||
| -rw-r--r-- | tools/perf/builtin-report.c | 4 | ||||
| -rw-r--r-- | tools/perf/builtin-sched.c | 2 | ||||
| -rw-r--r-- | tools/perf/builtin-script.c | 4 | ||||
| -rw-r--r-- | tools/perf/util/build-id.c | 2 | ||||
| -rw-r--r-- | tools/perf/util/event.c | 30 | ||||
| -rw-r--r-- | tools/perf/util/event.h | 6 |
9 files changed, 39 insertions, 21 deletions
diff --git a/tools/perf/builtin-annotate.c b/tools/perf/builtin-annotate.c index 9ea38540b873..cca2fb5c436f 100644 --- a/tools/perf/builtin-annotate.c +++ b/tools/perf/builtin-annotate.c | |||
| @@ -246,7 +246,7 @@ int cmd_annotate(int argc, const char **argv, const char *prefix __maybe_unused) | |||
| 246 | .sample = process_sample_event, | 246 | .sample = process_sample_event, |
| 247 | .mmap = perf_event__process_mmap, | 247 | .mmap = perf_event__process_mmap, |
| 248 | .comm = perf_event__process_comm, | 248 | .comm = perf_event__process_comm, |
| 249 | .fork = perf_event__process_task, | 249 | .fork = perf_event__process_fork, |
| 250 | .ordered_samples = true, | 250 | .ordered_samples = true, |
| 251 | .ordering_requires_timestamps = true, | 251 | .ordering_requires_timestamps = true, |
| 252 | }, | 252 | }, |
diff --git a/tools/perf/builtin-diff.c b/tools/perf/builtin-diff.c index b4db51375199..380683de1df3 100644 --- a/tools/perf/builtin-diff.c +++ b/tools/perf/builtin-diff.c | |||
| @@ -285,8 +285,8 @@ static struct perf_tool tool = { | |||
| 285 | .sample = diff__process_sample_event, | 285 | .sample = diff__process_sample_event, |
| 286 | .mmap = perf_event__process_mmap, | 286 | .mmap = perf_event__process_mmap, |
| 287 | .comm = perf_event__process_comm, | 287 | .comm = perf_event__process_comm, |
| 288 | .exit = perf_event__process_task, | 288 | .exit = perf_event__process_exit, |
| 289 | .fork = perf_event__process_task, | 289 | .fork = perf_event__process_fork, |
| 290 | .lost = perf_event__process_lost, | 290 | .lost = perf_event__process_lost, |
| 291 | .ordered_samples = true, | 291 | .ordered_samples = true, |
| 292 | .ordering_requires_timestamps = true, | 292 | .ordering_requires_timestamps = true, |
diff --git a/tools/perf/builtin-inject.c b/tools/perf/builtin-inject.c index 4688bea95c12..386a5c0013ff 100644 --- a/tools/perf/builtin-inject.c +++ b/tools/perf/builtin-inject.c | |||
| @@ -102,14 +102,14 @@ static int perf_event__repipe_mmap(struct perf_tool *tool, | |||
| 102 | return err; | 102 | return err; |
| 103 | } | 103 | } |
| 104 | 104 | ||
| 105 | static int perf_event__repipe_task(struct perf_tool *tool, | 105 | static int perf_event__repipe_fork(struct perf_tool *tool, |
| 106 | union perf_event *event, | 106 | union perf_event *event, |
| 107 | struct perf_sample *sample, | 107 | struct perf_sample *sample, |
| 108 | struct machine *machine) | 108 | struct machine *machine) |
| 109 | { | 109 | { |
| 110 | int err; | 110 | int err; |
| 111 | 111 | ||
| 112 | err = perf_event__process_task(tool, event, sample, machine); | 112 | err = perf_event__process_fork(tool, event, sample, machine); |
| 113 | perf_event__repipe(tool, event, sample, machine); | 113 | perf_event__repipe(tool, event, sample, machine); |
| 114 | 114 | ||
| 115 | return err; | 115 | return err; |
| @@ -227,7 +227,7 @@ static int __cmd_inject(struct perf_inject *inject) | |||
| 227 | if (inject->build_ids) { | 227 | if (inject->build_ids) { |
| 228 | inject->tool.sample = perf_event__inject_buildid; | 228 | inject->tool.sample = perf_event__inject_buildid; |
| 229 | inject->tool.mmap = perf_event__repipe_mmap; | 229 | inject->tool.mmap = perf_event__repipe_mmap; |
| 230 | inject->tool.fork = perf_event__repipe_task; | 230 | inject->tool.fork = perf_event__repipe_fork; |
| 231 | inject->tool.tracing_data = perf_event__repipe_tracing_data; | 231 | inject->tool.tracing_data = perf_event__repipe_tracing_data; |
| 232 | } | 232 | } |
| 233 | 233 | ||
diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c index a61725d89d3e..5104a40af563 100644 --- a/tools/perf/builtin-report.c +++ b/tools/perf/builtin-report.c | |||
| @@ -556,8 +556,8 @@ int cmd_report(int argc, const char **argv, const char *prefix __maybe_unused) | |||
| 556 | .sample = process_sample_event, | 556 | .sample = process_sample_event, |
| 557 | .mmap = perf_event__process_mmap, | 557 | .mmap = perf_event__process_mmap, |
| 558 | .comm = perf_event__process_comm, | 558 | .comm = perf_event__process_comm, |
| 559 | .exit = perf_event__process_task, | 559 | .exit = perf_event__process_exit, |
| 560 | .fork = perf_event__process_task, | 560 | .fork = perf_event__process_fork, |
| 561 | .lost = perf_event__process_lost, | 561 | .lost = perf_event__process_lost, |
| 562 | .read = process_read_event, | 562 | .read = process_read_event, |
| 563 | .attr = perf_event__process_attr, | 563 | .attr = perf_event__process_attr, |
diff --git a/tools/perf/builtin-sched.c b/tools/perf/builtin-sched.c index 3488ead3b60c..3a25cd83b56e 100644 --- a/tools/perf/builtin-sched.c +++ b/tools/perf/builtin-sched.c | |||
| @@ -1672,7 +1672,7 @@ int cmd_sched(int argc, const char **argv, const char *prefix __maybe_unused) | |||
| 1672 | .sample = perf_sched__process_tracepoint_sample, | 1672 | .sample = perf_sched__process_tracepoint_sample, |
| 1673 | .comm = perf_event__process_comm, | 1673 | .comm = perf_event__process_comm, |
| 1674 | .lost = perf_event__process_lost, | 1674 | .lost = perf_event__process_lost, |
| 1675 | .fork = perf_event__process_task, | 1675 | .fork = perf_event__process_fork, |
| 1676 | .ordered_samples = true, | 1676 | .ordered_samples = true, |
| 1677 | }, | 1677 | }, |
| 1678 | .cmp_pid = LIST_HEAD_INIT(sched.cmp_pid), | 1678 | .cmp_pid = LIST_HEAD_INIT(sched.cmp_pid), |
diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c index fb9625083a2e..04ceb0779d39 100644 --- a/tools/perf/builtin-script.c +++ b/tools/perf/builtin-script.c | |||
| @@ -520,8 +520,8 @@ static struct perf_tool perf_script = { | |||
| 520 | .sample = process_sample_event, | 520 | .sample = process_sample_event, |
| 521 | .mmap = perf_event__process_mmap, | 521 | .mmap = perf_event__process_mmap, |
| 522 | .comm = perf_event__process_comm, | 522 | .comm = perf_event__process_comm, |
| 523 | .exit = perf_event__process_task, | 523 | .exit = perf_event__process_exit, |
| 524 | .fork = perf_event__process_task, | 524 | .fork = perf_event__process_fork, |
| 525 | .attr = perf_event__process_attr, | 525 | .attr = perf_event__process_attr, |
| 526 | .event_type = perf_event__process_event_type, | 526 | .event_type = perf_event__process_event_type, |
| 527 | .tracing_data = perf_event__process_tracing_data, | 527 | .tracing_data = perf_event__process_tracing_data, |
diff --git a/tools/perf/util/build-id.c b/tools/perf/util/build-id.c index 8e3a740ddbd4..6a6399955ef2 100644 --- a/tools/perf/util/build-id.c +++ b/tools/perf/util/build-id.c | |||
| @@ -64,7 +64,7 @@ static int perf_event__exit_del_thread(struct perf_tool *tool __maybe_unused, | |||
| 64 | struct perf_tool build_id__mark_dso_hit_ops = { | 64 | struct perf_tool build_id__mark_dso_hit_ops = { |
| 65 | .sample = build_id__mark_dso_hit, | 65 | .sample = build_id__mark_dso_hit, |
| 66 | .mmap = perf_event__process_mmap, | 66 | .mmap = perf_event__process_mmap, |
| 67 | .fork = perf_event__process_task, | 67 | .fork = perf_event__process_fork, |
| 68 | .exit = perf_event__exit_del_thread, | 68 | .exit = perf_event__exit_del_thread, |
| 69 | .attr = perf_event__process_attr, | 69 | .attr = perf_event__process_attr, |
| 70 | .build_id = perf_event__process_build_id, | 70 | .build_id = perf_event__process_build_id, |
diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c index 6715b1938725..eaaee22628ea 100644 --- a/tools/perf/util/event.c +++ b/tools/perf/util/event.c | |||
| @@ -1,6 +1,7 @@ | |||
| 1 | #include <linux/types.h> | 1 | #include <linux/types.h> |
| 2 | #include "event.h" | 2 | #include "event.h" |
| 3 | #include "debug.h" | 3 | #include "debug.h" |
| 4 | #include "machine.h" | ||
| 4 | #include "sort.h" | 5 | #include "sort.h" |
| 5 | #include "string.h" | 6 | #include "string.h" |
| 6 | #include "strlist.h" | 7 | #include "strlist.h" |
| @@ -702,10 +703,10 @@ size_t perf_event__fprintf_task(union perf_event *event, FILE *fp) | |||
| 702 | event->fork.ppid, event->fork.ptid); | 703 | event->fork.ppid, event->fork.ptid); |
| 703 | } | 704 | } |
| 704 | 705 | ||
| 705 | int perf_event__process_task(struct perf_tool *tool __maybe_unused, | 706 | int perf_event__process_fork(struct perf_tool *tool __maybe_unused, |
| 706 | union perf_event *event, | 707 | union perf_event *event, |
| 707 | struct perf_sample *sample __maybe_unused, | 708 | struct perf_sample *sample __maybe_unused, |
| 708 | struct machine *machine) | 709 | struct machine *machine) |
| 709 | { | 710 | { |
| 710 | struct thread *thread = machine__findnew_thread(machine, event->fork.tid); | 711 | struct thread *thread = machine__findnew_thread(machine, event->fork.tid); |
| 711 | struct thread *parent = machine__findnew_thread(machine, event->fork.ptid); | 712 | struct thread *parent = machine__findnew_thread(machine, event->fork.ptid); |
| @@ -713,11 +714,6 @@ int perf_event__process_task(struct perf_tool *tool __maybe_unused, | |||
| 713 | if (dump_trace) | 714 | if (dump_trace) |
| 714 | perf_event__fprintf_task(event, stdout); | 715 | perf_event__fprintf_task(event, stdout); |
| 715 | 716 | ||
| 716 | if (event->header.type == PERF_RECORD_EXIT) { | ||
| 717 | machine__remove_thread(machine, thread); | ||
| 718 | return 0; | ||
| 719 | } | ||
| 720 | |||
| 721 | if (thread == NULL || parent == NULL || | 717 | if (thread == NULL || parent == NULL || |
| 722 | thread__fork(thread, parent) < 0) { | 718 | thread__fork(thread, parent) < 0) { |
| 723 | dump_printf("problem processing PERF_RECORD_FORK, skipping event.\n"); | 719 | dump_printf("problem processing PERF_RECORD_FORK, skipping event.\n"); |
| @@ -727,6 +723,22 @@ int perf_event__process_task(struct perf_tool *tool __maybe_unused, | |||
| 727 | return 0; | 723 | return 0; |
| 728 | } | 724 | } |
| 729 | 725 | ||
| 726 | int perf_event__process_exit(struct perf_tool *tool __maybe_unused, | ||
| 727 | union perf_event *event, | ||
| 728 | struct perf_sample *sample __maybe_unused, | ||
| 729 | struct machine *machine) | ||
| 730 | { | ||
| 731 | struct thread *thread = machine__find_thread(machine, event->fork.tid); | ||
| 732 | |||
| 733 | if (dump_trace) | ||
| 734 | perf_event__fprintf_task(event, stdout); | ||
| 735 | |||
| 736 | if (thread != NULL) | ||
| 737 | machine__remove_thread(machine, thread); | ||
| 738 | |||
| 739 | return 0; | ||
| 740 | } | ||
| 741 | |||
| 730 | size_t perf_event__fprintf(union perf_event *event, FILE *fp) | 742 | size_t perf_event__fprintf(union perf_event *event, FILE *fp) |
| 731 | { | 743 | { |
| 732 | size_t ret = fprintf(fp, "PERF_RECORD_%s", | 744 | size_t ret = fprintf(fp, "PERF_RECORD_%s", |
| @@ -761,8 +773,10 @@ int perf_event__process(struct perf_tool *tool, union perf_event *event, | |||
| 761 | perf_event__process_mmap(tool, event, sample, machine); | 773 | perf_event__process_mmap(tool, event, sample, machine); |
| 762 | break; | 774 | break; |
| 763 | case PERF_RECORD_FORK: | 775 | case PERF_RECORD_FORK: |
| 776 | perf_event__process_fork(tool, event, sample, machine); | ||
| 777 | break; | ||
| 764 | case PERF_RECORD_EXIT: | 778 | case PERF_RECORD_EXIT: |
| 765 | perf_event__process_task(tool, event, sample, machine); | 779 | perf_event__process_exit(tool, event, sample, machine); |
| 766 | break; | 780 | break; |
| 767 | case PERF_RECORD_LOST: | 781 | case PERF_RECORD_LOST: |
| 768 | perf_event__process_lost(tool, event, sample, machine); | 782 | perf_event__process_lost(tool, event, sample, machine); |
diff --git a/tools/perf/util/event.h b/tools/perf/util/event.h index 21b99e741a87..da97aff5bd75 100644 --- a/tools/perf/util/event.h +++ b/tools/perf/util/event.h | |||
| @@ -191,7 +191,11 @@ int perf_event__process_mmap(struct perf_tool *tool, | |||
| 191 | union perf_event *event, | 191 | union perf_event *event, |
| 192 | struct perf_sample *sample, | 192 | struct perf_sample *sample, |
| 193 | struct machine *machine); | 193 | struct machine *machine); |
| 194 | int perf_event__process_task(struct perf_tool *tool, | 194 | int perf_event__process_fork(struct perf_tool *tool, |
| 195 | union perf_event *event, | ||
| 196 | struct perf_sample *sample, | ||
| 197 | struct machine *machine); | ||
| 198 | int perf_event__process_exit(struct perf_tool *tool, | ||
| 195 | union perf_event *event, | 199 | union perf_event *event, |
| 196 | struct perf_sample *sample, | 200 | struct perf_sample *sample, |
| 197 | struct machine *machine); | 201 | struct machine *machine); |
