diff options
| author | Ingo Molnar <mingo@kernel.org> | 2014-01-14 11:25:12 -0500 |
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2014-01-14 11:25:12 -0500 |
| commit | 197749981e539c1eb5863f417de6dd4e2c02b76c (patch) | |
| tree | d7c81373a9ea1b833163e9c36d727b1b6ddab067 /tools/perf/tests | |
| parent | 1341f3e4c0276aae3de6d902c9202265d89fe438 (diff) | |
| parent | 26f7f9877234e6b9ed87eff4ca450631bafe0182 (diff) | |
Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core
Pull perf tooling updates from Arnaldo Carvalho de Melo:
New features:
* perf record: Add --initial-delay option (Andi Kleen)
* Column colouring improvements in 'diff' (Ramkumar Ramachandra)
Fixes:
* Don't show counter information when workload fails (Arnaldo Carvalho de Melo)
* Fixup leak on error path in parse events test. (Arnaldo Carvalho de Melo)
* Fix --delay option in 'stat' man page (Andi Kleen)
* Use the DWARF unwind info only if loaded (Jean Pihet):
Developer stuff:
* Improve forked workload error reporting by sending the errno in the signal
data queueing integer field, using sigqueue and by doing the signal setup in
the evlist methods, removing open coded equivalents in various tools. (Arnaldo Carvalho de Melo)
* Do more auto exit cleanup shores in the 'evlist' destructor, so that the tools
don't have to all do that sequence. (Arnaldo Carvalho de Melo)
* Pack 'struct perf_session_env' and 'struct trace' (Arnaldo Carvalho de Melo)
* Include tools/lib/api/ in MANIFEST, fixing detached tarballs (Arnaldo Carvalho de Melo)
* Add test for building detached source tarballs (Arnaldo Carvalho de Melo)
* Shut up libtracevent plugins make message (Jiri Olsa)
* Fix installation tests path setup (Jiri Olsa)
* Fix id_hdr_size initialization (Jiri Olsa)
* Move some header files from tools/perf/ to tools/include/ to make them available to
other tools/ dwelling codebases (Namhyung Kim)
* Fix 'probe' build when DWARF support libraries not present (Arnaldo Carvalho de Melo)
Refactorings:
* Move logic to warn about kptr_restrict'ed kernels to separate
function in 'report' (Arnaldo Carvalho de Melo)
* Move hist browser selection code to separate function (Arnaldo Carvalho de Melo)
* Move histogram entries collapsing to separate function (Arnaldo Carvalho de Melo)
* Introduce evlist__for_each() & friends (Arnaldo Carvalho de Melo)
* Automate setup of FEATURE_CHECK_(C|LD)FLAGS-all variables (Jiri Olsa)
* Move arch setup into seprate Makefile (Jiri Olsa)
Trivial stuff:
* Remove misplaced __maybe_unused in 'stat' (Arnaldo Carvalho de Melo)
* Remove old evsel_list usage in 'record' (Arnaldo Carvalho de Melo)
* Comment typo fix (Cody P Schafer)
* Remove unused test-volatile-register-var.c (Yann Droneaud)
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'tools/perf/tests')
| -rw-r--r-- | tools/perf/tests/code-reading.c | 7 | ||||
| -rw-r--r-- | tools/perf/tests/evsel-roundtrip-name.c | 2 | ||||
| -rw-r--r-- | tools/perf/tests/hists_link.c | 4 | ||||
| -rw-r--r-- | tools/perf/tests/keep-tracking.c | 7 | ||||
| -rw-r--r-- | tools/perf/tests/make | 40 | ||||
| -rw-r--r-- | tools/perf/tests/mmap-basic.c | 25 | ||||
| -rw-r--r-- | tools/perf/tests/open-syscall-tp-fields.c | 16 | ||||
| -rw-r--r-- | tools/perf/tests/parse-events.c | 10 | ||||
| -rw-r--r-- | tools/perf/tests/perf-record.c | 21 | ||||
| -rwxr-xr-x | tools/perf/tests/perf-targz-src-pkg | 21 | ||||
| -rw-r--r-- | tools/perf/tests/perf-time-to-tsc.c | 6 | ||||
| -rw-r--r-- | tools/perf/tests/sw-clock.c | 18 | ||||
| -rw-r--r-- | tools/perf/tests/task-exit.c | 33 |
13 files changed, 109 insertions, 101 deletions
diff --git a/tools/perf/tests/code-reading.c b/tools/perf/tests/code-reading.c index 4248d1e96848..653a8fe2db95 100644 --- a/tools/perf/tests/code-reading.c +++ b/tools/perf/tests/code-reading.c | |||
| @@ -540,14 +540,11 @@ static int do_test_code_reading(bool try_kcore) | |||
| 540 | err = TEST_CODE_READING_OK; | 540 | err = TEST_CODE_READING_OK; |
| 541 | out_err: | 541 | out_err: |
| 542 | if (evlist) { | 542 | if (evlist) { |
| 543 | perf_evlist__munmap(evlist); | ||
| 544 | perf_evlist__close(evlist); | ||
| 545 | perf_evlist__delete(evlist); | 543 | perf_evlist__delete(evlist); |
| 546 | } | 544 | } else { |
| 547 | if (cpus) | ||
| 548 | cpu_map__delete(cpus); | 545 | cpu_map__delete(cpus); |
| 549 | if (threads) | ||
| 550 | thread_map__delete(threads); | 546 | thread_map__delete(threads); |
| 547 | } | ||
| 551 | machines__destroy_kernel_maps(&machines); | 548 | machines__destroy_kernel_maps(&machines); |
| 552 | machine__delete_threads(machine); | 549 | machine__delete_threads(machine); |
| 553 | machines__exit(&machines); | 550 | machines__exit(&machines); |
diff --git a/tools/perf/tests/evsel-roundtrip-name.c b/tools/perf/tests/evsel-roundtrip-name.c index 0197bda9c461..465cdbc345cf 100644 --- a/tools/perf/tests/evsel-roundtrip-name.c +++ b/tools/perf/tests/evsel-roundtrip-name.c | |||
| @@ -79,7 +79,7 @@ static int __perf_evsel__name_array_test(const char *names[], int nr_names) | |||
| 79 | } | 79 | } |
| 80 | 80 | ||
| 81 | err = 0; | 81 | err = 0; |
| 82 | list_for_each_entry(evsel, &evlist->entries, node) { | 82 | evlist__for_each(evlist, evsel) { |
| 83 | if (strcmp(perf_evsel__name(evsel), names[evsel->idx])) { | 83 | if (strcmp(perf_evsel__name(evsel), names[evsel->idx])) { |
| 84 | --err; | 84 | --err; |
| 85 | pr_debug("%s != %s\n", perf_evsel__name(evsel), names[evsel->idx]); | 85 | pr_debug("%s != %s\n", perf_evsel__name(evsel), names[evsel->idx]); |
diff --git a/tools/perf/tests/hists_link.c b/tools/perf/tests/hists_link.c index 173bf42cc03e..2b6519e0e36f 100644 --- a/tools/perf/tests/hists_link.c +++ b/tools/perf/tests/hists_link.c | |||
| @@ -208,7 +208,7 @@ static int add_hist_entries(struct perf_evlist *evlist, struct machine *machine) | |||
| 208 | * However the second evsel also has a collapsed entry for | 208 | * However the second evsel also has a collapsed entry for |
| 209 | * "bash [libc] malloc" so total 9 entries will be in the tree. | 209 | * "bash [libc] malloc" so total 9 entries will be in the tree. |
| 210 | */ | 210 | */ |
| 211 | list_for_each_entry(evsel, &evlist->entries, node) { | 211 | evlist__for_each(evlist, evsel) { |
| 212 | for (k = 0; k < ARRAY_SIZE(fake_common_samples); k++) { | 212 | for (k = 0; k < ARRAY_SIZE(fake_common_samples); k++) { |
| 213 | const union perf_event event = { | 213 | const union perf_event event = { |
| 214 | .header = { | 214 | .header = { |
| @@ -466,7 +466,7 @@ int test__hists_link(void) | |||
| 466 | if (err < 0) | 466 | if (err < 0) |
| 467 | goto out; | 467 | goto out; |
| 468 | 468 | ||
| 469 | list_for_each_entry(evsel, &evlist->entries, node) { | 469 | evlist__for_each(evlist, evsel) { |
| 470 | hists__collapse_resort(&evsel->hists, NULL); | 470 | hists__collapse_resort(&evsel->hists, NULL); |
| 471 | 471 | ||
| 472 | if (verbose > 2) | 472 | if (verbose > 2) |
diff --git a/tools/perf/tests/keep-tracking.c b/tools/perf/tests/keep-tracking.c index 27eb75142b88..497957f269d8 100644 --- a/tools/perf/tests/keep-tracking.c +++ b/tools/perf/tests/keep-tracking.c | |||
| @@ -142,14 +142,11 @@ int test__keep_tracking(void) | |||
| 142 | out_err: | 142 | out_err: |
| 143 | if (evlist) { | 143 | if (evlist) { |
| 144 | perf_evlist__disable(evlist); | 144 | perf_evlist__disable(evlist); |
| 145 | perf_evlist__munmap(evlist); | ||
| 146 | perf_evlist__close(evlist); | ||
| 147 | perf_evlist__delete(evlist); | 145 | perf_evlist__delete(evlist); |
| 148 | } | 146 | } else { |
| 149 | if (cpus) | ||
| 150 | cpu_map__delete(cpus); | 147 | cpu_map__delete(cpus); |
| 151 | if (threads) | ||
| 152 | thread_map__delete(threads); | 148 | thread_map__delete(threads); |
| 149 | } | ||
| 153 | 150 | ||
| 154 | return err; | 151 | return err; |
| 155 | } | 152 | } |
diff --git a/tools/perf/tests/make b/tools/perf/tests/make index f641c35f2321..00544b8b644b 100644 --- a/tools/perf/tests/make +++ b/tools/perf/tests/make | |||
| @@ -1,6 +1,16 @@ | |||
| 1 | PERF := . | 1 | PERF := . |
| 2 | MK := Makefile | 2 | MK := Makefile |
| 3 | 3 | ||
| 4 | include config/Makefile.arch | ||
| 5 | |||
| 6 | # FIXME looks like x86 is the only arch running tests ;-) | ||
| 7 | # we need some IS_(32/64) flag to make this generic | ||
| 8 | ifeq ($(IS_X86_64),1) | ||
| 9 | lib = lib64 | ||
| 10 | else | ||
| 11 | lib = lib | ||
| 12 | endif | ||
| 13 | |||
| 4 | has = $(shell which $1 2>/dev/null) | 14 | has = $(shell which $1 2>/dev/null) |
| 5 | 15 | ||
| 6 | # standard single make variable specified | 16 | # standard single make variable specified |
| @@ -118,16 +128,16 @@ installed_files_bin := bin/perf | |||
| 118 | installed_files_bin += etc/bash_completion.d/perf | 128 | installed_files_bin += etc/bash_completion.d/perf |
| 119 | installed_files_bin += libexec/perf-core/perf-archive | 129 | installed_files_bin += libexec/perf-core/perf-archive |
| 120 | 130 | ||
| 121 | installed_files_plugins := lib64/traceevent/plugins/plugin_cfg80211.so | 131 | installed_files_plugins := $(lib)/traceevent/plugins/plugin_cfg80211.so |
| 122 | installed_files_plugins += lib64/traceevent/plugins/plugin_scsi.so | 132 | installed_files_plugins += $(lib)/traceevent/plugins/plugin_scsi.so |
| 123 | installed_files_plugins += lib64/traceevent/plugins/plugin_xen.so | 133 | installed_files_plugins += $(lib)/traceevent/plugins/plugin_xen.so |
| 124 | installed_files_plugins += lib64/traceevent/plugins/plugin_function.so | 134 | installed_files_plugins += $(lib)/traceevent/plugins/plugin_function.so |
| 125 | installed_files_plugins += lib64/traceevent/plugins/plugin_sched_switch.so | 135 | installed_files_plugins += $(lib)/traceevent/plugins/plugin_sched_switch.so |
| 126 | installed_files_plugins += lib64/traceevent/plugins/plugin_mac80211.so | 136 | installed_files_plugins += $(lib)/traceevent/plugins/plugin_mac80211.so |
| 127 | installed_files_plugins += lib64/traceevent/plugins/plugin_kvm.so | 137 | installed_files_plugins += $(lib)/traceevent/plugins/plugin_kvm.so |
| 128 | installed_files_plugins += lib64/traceevent/plugins/plugin_kmem.so | 138 | installed_files_plugins += $(lib)/traceevent/plugins/plugin_kmem.so |
| 129 | installed_files_plugins += lib64/traceevent/plugins/plugin_hrtimer.so | 139 | installed_files_plugins += $(lib)/traceevent/plugins/plugin_hrtimer.so |
| 130 | installed_files_plugins += lib64/traceevent/plugins/plugin_jbd2.so | 140 | installed_files_plugins += $(lib)/traceevent/plugins/plugin_jbd2.so |
| 131 | 141 | ||
| 132 | installed_files_all := $(installed_files_bin) | 142 | installed_files_all := $(installed_files_bin) |
| 133 | installed_files_all += $(installed_files_plugins) | 143 | installed_files_all += $(installed_files_plugins) |
| @@ -206,10 +216,16 @@ $(run_O): | |||
| 206 | rm -rf $$TMP_O \ | 216 | rm -rf $$TMP_O \ |
| 207 | rm -rf $$TMP_DEST | 217 | rm -rf $$TMP_DEST |
| 208 | 218 | ||
| 209 | all: $(run) $(run_O) | 219 | tarpkg: |
| 220 | @cmd="$(PERF)/tests/perf-targz-src-pkg $(PERF)"; \ | ||
| 221 | echo "- $@: $$cmd" && echo $$cmd > $@ && \ | ||
| 222 | ( eval $$cmd ) >> $@ 2>&1 | ||
| 223 | |||
| 224 | |||
| 225 | all: $(run) $(run_O) tarpkg | ||
| 210 | @echo OK | 226 | @echo OK |
| 211 | 227 | ||
| 212 | out: $(run_O) | 228 | out: $(run_O) |
| 213 | @echo OK | 229 | @echo OK |
| 214 | 230 | ||
| 215 | .PHONY: all $(run) $(run_O) clean | 231 | .PHONY: all $(run) $(run_O) tarpkg clean |
diff --git a/tools/perf/tests/mmap-basic.c b/tools/perf/tests/mmap-basic.c index d64ab79c6d35..142263492f6f 100644 --- a/tools/perf/tests/mmap-basic.c +++ b/tools/perf/tests/mmap-basic.c | |||
| @@ -68,7 +68,7 @@ int test__basic_mmap(void) | |||
| 68 | evsels[i] = perf_evsel__newtp("syscalls", name); | 68 | evsels[i] = perf_evsel__newtp("syscalls", name); |
| 69 | if (evsels[i] == NULL) { | 69 | if (evsels[i] == NULL) { |
| 70 | pr_debug("perf_evsel__new\n"); | 70 | pr_debug("perf_evsel__new\n"); |
| 71 | goto out_free_evlist; | 71 | goto out_delete_evlist; |
| 72 | } | 72 | } |
| 73 | 73 | ||
| 74 | evsels[i]->attr.wakeup_events = 1; | 74 | evsels[i]->attr.wakeup_events = 1; |
| @@ -80,7 +80,7 @@ int test__basic_mmap(void) | |||
| 80 | pr_debug("failed to open counter: %s, " | 80 | pr_debug("failed to open counter: %s, " |
| 81 | "tweak /proc/sys/kernel/perf_event_paranoid?\n", | 81 | "tweak /proc/sys/kernel/perf_event_paranoid?\n", |
| 82 | strerror(errno)); | 82 | strerror(errno)); |
| 83 | goto out_close_fd; | 83 | goto out_delete_evlist; |
| 84 | } | 84 | } |
| 85 | 85 | ||
| 86 | nr_events[i] = 0; | 86 | nr_events[i] = 0; |
| @@ -90,7 +90,7 @@ int test__basic_mmap(void) | |||
| 90 | if (perf_evlist__mmap(evlist, 128, true) < 0) { | 90 | if (perf_evlist__mmap(evlist, 128, true) < 0) { |
| 91 | pr_debug("failed to mmap events: %d (%s)\n", errno, | 91 | pr_debug("failed to mmap events: %d (%s)\n", errno, |
| 92 | strerror(errno)); | 92 | strerror(errno)); |
| 93 | goto out_close_fd; | 93 | goto out_delete_evlist; |
| 94 | } | 94 | } |
| 95 | 95 | ||
| 96 | for (i = 0; i < nsyscalls; ++i) | 96 | for (i = 0; i < nsyscalls; ++i) |
| @@ -105,13 +105,13 @@ int test__basic_mmap(void) | |||
| 105 | if (event->header.type != PERF_RECORD_SAMPLE) { | 105 | if (event->header.type != PERF_RECORD_SAMPLE) { |
| 106 | pr_debug("unexpected %s event\n", | 106 | pr_debug("unexpected %s event\n", |
| 107 | perf_event__name(event->header.type)); | 107 | perf_event__name(event->header.type)); |
| 108 | goto out_munmap; | 108 | goto out_delete_evlist; |
| 109 | } | 109 | } |
| 110 | 110 | ||
| 111 | err = perf_evlist__parse_sample(evlist, event, &sample); | 111 | err = perf_evlist__parse_sample(evlist, event, &sample); |
| 112 | if (err) { | 112 | if (err) { |
| 113 | pr_err("Can't parse sample, err = %d\n", err); | 113 | pr_err("Can't parse sample, err = %d\n", err); |
| 114 | goto out_munmap; | 114 | goto out_delete_evlist; |
| 115 | } | 115 | } |
| 116 | 116 | ||
| 117 | err = -1; | 117 | err = -1; |
| @@ -119,30 +119,27 @@ int test__basic_mmap(void) | |||
| 119 | if (evsel == NULL) { | 119 | if (evsel == NULL) { |
| 120 | pr_debug("event with id %" PRIu64 | 120 | pr_debug("event with id %" PRIu64 |
| 121 | " doesn't map to an evsel\n", sample.id); | 121 | " doesn't map to an evsel\n", sample.id); |
| 122 | goto out_munmap; | 122 | goto out_delete_evlist; |
| 123 | } | 123 | } |
| 124 | nr_events[evsel->idx]++; | 124 | nr_events[evsel->idx]++; |
| 125 | perf_evlist__mmap_consume(evlist, 0); | 125 | perf_evlist__mmap_consume(evlist, 0); |
| 126 | } | 126 | } |
| 127 | 127 | ||
| 128 | err = 0; | 128 | err = 0; |
| 129 | list_for_each_entry(evsel, &evlist->entries, node) { | 129 | evlist__for_each(evlist, evsel) { |
| 130 | if (nr_events[evsel->idx] != expected_nr_events[evsel->idx]) { | 130 | if (nr_events[evsel->idx] != expected_nr_events[evsel->idx]) { |
| 131 | pr_debug("expected %d %s events, got %d\n", | 131 | pr_debug("expected %d %s events, got %d\n", |
| 132 | expected_nr_events[evsel->idx], | 132 | expected_nr_events[evsel->idx], |
| 133 | perf_evsel__name(evsel), nr_events[evsel->idx]); | 133 | perf_evsel__name(evsel), nr_events[evsel->idx]); |
| 134 | err = -1; | 134 | err = -1; |
| 135 | goto out_munmap; | 135 | goto out_delete_evlist; |
| 136 | } | 136 | } |
| 137 | } | 137 | } |
| 138 | 138 | ||
| 139 | out_munmap: | 139 | out_delete_evlist: |
| 140 | perf_evlist__munmap(evlist); | ||
| 141 | out_close_fd: | ||
| 142 | for (i = 0; i < nsyscalls; ++i) | ||
| 143 | perf_evsel__close_fd(evsels[i], 1, threads->nr); | ||
| 144 | out_free_evlist: | ||
| 145 | perf_evlist__delete(evlist); | 140 | perf_evlist__delete(evlist); |
| 141 | cpus = NULL; | ||
| 142 | threads = NULL; | ||
| 146 | out_free_cpus: | 143 | out_free_cpus: |
| 147 | cpu_map__delete(cpus); | 144 | cpu_map__delete(cpus); |
| 148 | out_free_threads: | 145 | out_free_threads: |
diff --git a/tools/perf/tests/open-syscall-tp-fields.c b/tools/perf/tests/open-syscall-tp-fields.c index 774620a5aecb..5a016f66f5d2 100644 --- a/tools/perf/tests/open-syscall-tp-fields.c +++ b/tools/perf/tests/open-syscall-tp-fields.c | |||
| @@ -48,13 +48,13 @@ int test__syscall_open_tp_fields(void) | |||
| 48 | err = perf_evlist__open(evlist); | 48 | err = perf_evlist__open(evlist); |
| 49 | if (err < 0) { | 49 | if (err < 0) { |
| 50 | pr_debug("perf_evlist__open: %s\n", strerror(errno)); | 50 | pr_debug("perf_evlist__open: %s\n", strerror(errno)); |
| 51 | goto out_delete_maps; | 51 | goto out_delete_evlist; |
| 52 | } | 52 | } |
| 53 | 53 | ||
| 54 | err = perf_evlist__mmap(evlist, UINT_MAX, false); | 54 | err = perf_evlist__mmap(evlist, UINT_MAX, false); |
| 55 | if (err < 0) { | 55 | if (err < 0) { |
| 56 | pr_debug("perf_evlist__mmap: %s\n", strerror(errno)); | 56 | pr_debug("perf_evlist__mmap: %s\n", strerror(errno)); |
| 57 | goto out_close_evlist; | 57 | goto out_delete_evlist; |
| 58 | } | 58 | } |
| 59 | 59 | ||
| 60 | perf_evlist__enable(evlist); | 60 | perf_evlist__enable(evlist); |
| @@ -85,7 +85,7 @@ int test__syscall_open_tp_fields(void) | |||
| 85 | err = perf_evsel__parse_sample(evsel, event, &sample); | 85 | err = perf_evsel__parse_sample(evsel, event, &sample); |
| 86 | if (err) { | 86 | if (err) { |
| 87 | pr_err("Can't parse sample, err = %d\n", err); | 87 | pr_err("Can't parse sample, err = %d\n", err); |
| 88 | goto out_munmap; | 88 | goto out_delete_evlist; |
| 89 | } | 89 | } |
| 90 | 90 | ||
| 91 | tp_flags = perf_evsel__intval(evsel, &sample, "flags"); | 91 | tp_flags = perf_evsel__intval(evsel, &sample, "flags"); |
| @@ -93,7 +93,7 @@ int test__syscall_open_tp_fields(void) | |||
| 93 | if (flags != tp_flags) { | 93 | if (flags != tp_flags) { |
| 94 | pr_debug("%s: Expected flags=%#x, got %#x\n", | 94 | pr_debug("%s: Expected flags=%#x, got %#x\n", |
| 95 | __func__, flags, tp_flags); | 95 | __func__, flags, tp_flags); |
| 96 | goto out_munmap; | 96 | goto out_delete_evlist; |
| 97 | } | 97 | } |
| 98 | 98 | ||
| 99 | goto out_ok; | 99 | goto out_ok; |
| @@ -105,17 +105,11 @@ int test__syscall_open_tp_fields(void) | |||
| 105 | 105 | ||
| 106 | if (++nr_polls > 5) { | 106 | if (++nr_polls > 5) { |
| 107 | pr_debug("%s: no events!\n", __func__); | 107 | pr_debug("%s: no events!\n", __func__); |
| 108 | goto out_munmap; | 108 | goto out_delete_evlist; |
| 109 | } | 109 | } |
| 110 | } | 110 | } |
| 111 | out_ok: | 111 | out_ok: |
| 112 | err = 0; | 112 | err = 0; |
| 113 | out_munmap: | ||
| 114 | perf_evlist__munmap(evlist); | ||
| 115 | out_close_evlist: | ||
| 116 | perf_evlist__close(evlist); | ||
| 117 | out_delete_maps: | ||
| 118 | perf_evlist__delete_maps(evlist); | ||
| 119 | out_delete_evlist: | 113 | out_delete_evlist: |
| 120 | perf_evlist__delete(evlist); | 114 | perf_evlist__delete(evlist); |
| 121 | out: | 115 | out: |
diff --git a/tools/perf/tests/parse-events.c b/tools/perf/tests/parse-events.c index e4ce8aed29d3..4db0ae617d70 100644 --- a/tools/perf/tests/parse-events.c +++ b/tools/perf/tests/parse-events.c | |||
| @@ -30,7 +30,7 @@ static int test__checkevent_tracepoint_multi(struct perf_evlist *evlist) | |||
| 30 | TEST_ASSERT_VAL("wrong number of entries", evlist->nr_entries > 1); | 30 | TEST_ASSERT_VAL("wrong number of entries", evlist->nr_entries > 1); |
| 31 | TEST_ASSERT_VAL("wrong number of groups", 0 == evlist->nr_groups); | 31 | TEST_ASSERT_VAL("wrong number of groups", 0 == evlist->nr_groups); |
| 32 | 32 | ||
| 33 | list_for_each_entry(evsel, &evlist->entries, node) { | 33 | evlist__for_each(evlist, evsel) { |
| 34 | TEST_ASSERT_VAL("wrong type", | 34 | TEST_ASSERT_VAL("wrong type", |
| 35 | PERF_TYPE_TRACEPOINT == evsel->attr.type); | 35 | PERF_TYPE_TRACEPOINT == evsel->attr.type); |
| 36 | TEST_ASSERT_VAL("wrong sample_type", | 36 | TEST_ASSERT_VAL("wrong sample_type", |
| @@ -201,7 +201,7 @@ test__checkevent_tracepoint_multi_modifier(struct perf_evlist *evlist) | |||
| 201 | 201 | ||
| 202 | TEST_ASSERT_VAL("wrong number of entries", evlist->nr_entries > 1); | 202 | TEST_ASSERT_VAL("wrong number of entries", evlist->nr_entries > 1); |
| 203 | 203 | ||
| 204 | list_for_each_entry(evsel, &evlist->entries, node) { | 204 | evlist__for_each(evlist, evsel) { |
| 205 | TEST_ASSERT_VAL("wrong exclude_user", | 205 | TEST_ASSERT_VAL("wrong exclude_user", |
| 206 | !evsel->attr.exclude_user); | 206 | !evsel->attr.exclude_user); |
| 207 | TEST_ASSERT_VAL("wrong exclude_kernel", | 207 | TEST_ASSERT_VAL("wrong exclude_kernel", |
| @@ -1385,10 +1385,10 @@ static int test_event(struct evlist_test *e) | |||
| 1385 | if (ret) { | 1385 | if (ret) { |
| 1386 | pr_debug("failed to parse event '%s', err %d\n", | 1386 | pr_debug("failed to parse event '%s', err %d\n", |
| 1387 | e->name, ret); | 1387 | e->name, ret); |
| 1388 | return ret; | 1388 | } else { |
| 1389 | ret = e->check(evlist); | ||
| 1389 | } | 1390 | } |
| 1390 | 1391 | ||
| 1391 | ret = e->check(evlist); | ||
| 1392 | perf_evlist__delete(evlist); | 1392 | perf_evlist__delete(evlist); |
| 1393 | 1393 | ||
| 1394 | return ret; | 1394 | return ret; |
diff --git a/tools/perf/tests/perf-record.c b/tools/perf/tests/perf-record.c index eeba562920e9..39cc7c3c0d0c 100644 --- a/tools/perf/tests/perf-record.c +++ b/tools/perf/tests/perf-record.c | |||
| @@ -83,11 +83,10 @@ int test__PERF_RECORD(void) | |||
| 83 | * so that we have time to open the evlist (calling sys_perf_event_open | 83 | * so that we have time to open the evlist (calling sys_perf_event_open |
| 84 | * on all the fds) and then mmap them. | 84 | * on all the fds) and then mmap them. |
| 85 | */ | 85 | */ |
| 86 | err = perf_evlist__prepare_workload(evlist, &opts.target, argv, | 86 | err = perf_evlist__prepare_workload(evlist, &opts.target, argv, false, NULL); |
| 87 | false, false); | ||
| 88 | if (err < 0) { | 87 | if (err < 0) { |
| 89 | pr_debug("Couldn't run the workload!\n"); | 88 | pr_debug("Couldn't run the workload!\n"); |
| 90 | goto out_delete_maps; | 89 | goto out_delete_evlist; |
| 91 | } | 90 | } |
| 92 | 91 | ||
| 93 | /* | 92 | /* |
| @@ -102,7 +101,7 @@ int test__PERF_RECORD(void) | |||
| 102 | err = sched__get_first_possible_cpu(evlist->workload.pid, &cpu_mask); | 101 | err = sched__get_first_possible_cpu(evlist->workload.pid, &cpu_mask); |
| 103 | if (err < 0) { | 102 | if (err < 0) { |
| 104 | pr_debug("sched__get_first_possible_cpu: %s\n", strerror(errno)); | 103 | pr_debug("sched__get_first_possible_cpu: %s\n", strerror(errno)); |
| 105 | goto out_delete_maps; | 104 | goto out_delete_evlist; |
| 106 | } | 105 | } |
| 107 | 106 | ||
| 108 | cpu = err; | 107 | cpu = err; |
| @@ -112,7 +111,7 @@ int test__PERF_RECORD(void) | |||
| 112 | */ | 111 | */ |
| 113 | if (sched_setaffinity(evlist->workload.pid, cpu_mask_size, &cpu_mask) < 0) { | 112 | if (sched_setaffinity(evlist->workload.pid, cpu_mask_size, &cpu_mask) < 0) { |
| 114 | pr_debug("sched_setaffinity: %s\n", strerror(errno)); | 113 | pr_debug("sched_setaffinity: %s\n", strerror(errno)); |
| 115 | goto out_delete_maps; | 114 | goto out_delete_evlist; |
| 116 | } | 115 | } |
| 117 | 116 | ||
| 118 | /* | 117 | /* |
| @@ -122,7 +121,7 @@ int test__PERF_RECORD(void) | |||
| 122 | err = perf_evlist__open(evlist); | 121 | err = perf_evlist__open(evlist); |
| 123 | if (err < 0) { | 122 | if (err < 0) { |
| 124 | pr_debug("perf_evlist__open: %s\n", strerror(errno)); | 123 | pr_debug("perf_evlist__open: %s\n", strerror(errno)); |
| 125 | goto out_delete_maps; | 124 | goto out_delete_evlist; |
| 126 | } | 125 | } |
| 127 | 126 | ||
| 128 | /* | 127 | /* |
| @@ -133,7 +132,7 @@ int test__PERF_RECORD(void) | |||
| 133 | err = perf_evlist__mmap(evlist, opts.mmap_pages, false); | 132 | err = perf_evlist__mmap(evlist, opts.mmap_pages, false); |
| 134 | if (err < 0) { | 133 | if (err < 0) { |
| 135 | pr_debug("perf_evlist__mmap: %s\n", strerror(errno)); | 134 | pr_debug("perf_evlist__mmap: %s\n", strerror(errno)); |
| 136 | goto out_close_evlist; | 135 | goto out_delete_evlist; |
| 137 | } | 136 | } |
| 138 | 137 | ||
| 139 | /* | 138 | /* |
| @@ -166,7 +165,7 @@ int test__PERF_RECORD(void) | |||
| 166 | if (verbose) | 165 | if (verbose) |
| 167 | perf_event__fprintf(event, stderr); | 166 | perf_event__fprintf(event, stderr); |
| 168 | pr_debug("Couldn't parse sample\n"); | 167 | pr_debug("Couldn't parse sample\n"); |
| 169 | goto out_err; | 168 | goto out_delete_evlist; |
| 170 | } | 169 | } |
| 171 | 170 | ||
| 172 | if (verbose) { | 171 | if (verbose) { |
| @@ -303,12 +302,6 @@ found_exit: | |||
| 303 | pr_debug("PERF_RECORD_MMAP for %s missing!\n", "[vdso]"); | 302 | pr_debug("PERF_RECORD_MMAP for %s missing!\n", "[vdso]"); |
| 304 | ++errs; | 303 | ++errs; |
| 305 | } | 304 | } |
| 306 | out_err: | ||
| 307 | perf_evlist__munmap(evlist); | ||
| 308 | out_close_evlist: | ||
| 309 | perf_evlist__close(evlist); | ||
| 310 | out_delete_maps: | ||
| 311 | perf_evlist__delete_maps(evlist); | ||
| 312 | out_delete_evlist: | 305 | out_delete_evlist: |
| 313 | perf_evlist__delete(evlist); | 306 | perf_evlist__delete(evlist); |
| 314 | out: | 307 | out: |
diff --git a/tools/perf/tests/perf-targz-src-pkg b/tools/perf/tests/perf-targz-src-pkg new file mode 100755 index 000000000000..238aa3927c71 --- /dev/null +++ b/tools/perf/tests/perf-targz-src-pkg | |||
| @@ -0,0 +1,21 @@ | |||
| 1 | #!/bin/sh | ||
| 2 | # Test one of the main kernel Makefile targets to generate a perf sources tarball | ||
| 3 | # suitable for build outside the full kernel sources. | ||
| 4 | # | ||
| 5 | # This is to test that the tools/perf/MANIFEST file lists all the files needed to | ||
| 6 | # be in such tarball, which sometimes gets broken when we move files around, | ||
| 7 | # like when we made some files that were in tools/perf/ available to other tools/ | ||
| 8 | # codebases by moving it to tools/include/, etc. | ||
| 9 | |||
| 10 | PERF=$1 | ||
| 11 | cd ${PERF}/../.. | ||
| 12 | make perf-targz-src-pkg > /dev/null | ||
| 13 | TARBALL=$(ls -rt perf-*.tar.gz) | ||
| 14 | TMP_DEST=$(mktemp -d) | ||
| 15 | tar xf ${TARBALL} -C $TMP_DEST | ||
| 16 | rm -f ${TARBALL} | ||
| 17 | cd - > /dev/null | ||
| 18 | make -C $TMP_DEST/perf*/tools/perf > /dev/null 2>&1 | ||
| 19 | RC=$? | ||
| 20 | rm -rf ${TMP_DEST} | ||
| 21 | exit $RC | ||
diff --git a/tools/perf/tests/perf-time-to-tsc.c b/tools/perf/tests/perf-time-to-tsc.c index c6398b90e897..47146d388dbf 100644 --- a/tools/perf/tests/perf-time-to-tsc.c +++ b/tools/perf/tests/perf-time-to-tsc.c | |||
| @@ -166,14 +166,8 @@ next_event: | |||
| 166 | out_err: | 166 | out_err: |
| 167 | if (evlist) { | 167 | if (evlist) { |
| 168 | perf_evlist__disable(evlist); | 168 | perf_evlist__disable(evlist); |
| 169 | perf_evlist__munmap(evlist); | ||
| 170 | perf_evlist__close(evlist); | ||
| 171 | perf_evlist__delete(evlist); | 169 | perf_evlist__delete(evlist); |
| 172 | } | 170 | } |
| 173 | if (cpus) | ||
| 174 | cpu_map__delete(cpus); | ||
| 175 | if (threads) | ||
| 176 | thread_map__delete(threads); | ||
| 177 | 171 | ||
| 178 | return err; | 172 | return err; |
| 179 | } | 173 | } |
diff --git a/tools/perf/tests/sw-clock.c b/tools/perf/tests/sw-clock.c index 6664a7cd828c..983d6b8562a8 100644 --- a/tools/perf/tests/sw-clock.c +++ b/tools/perf/tests/sw-clock.c | |||
| @@ -45,7 +45,7 @@ static int __test__sw_clock_freq(enum perf_sw_ids clock_id) | |||
| 45 | evsel = perf_evsel__new(&attr); | 45 | evsel = perf_evsel__new(&attr); |
| 46 | if (evsel == NULL) { | 46 | if (evsel == NULL) { |
| 47 | pr_debug("perf_evsel__new\n"); | 47 | pr_debug("perf_evsel__new\n"); |
| 48 | goto out_free_evlist; | 48 | goto out_delete_evlist; |
| 49 | } | 49 | } |
| 50 | perf_evlist__add(evlist, evsel); | 50 | perf_evlist__add(evlist, evsel); |
| 51 | 51 | ||
| @@ -54,7 +54,7 @@ static int __test__sw_clock_freq(enum perf_sw_ids clock_id) | |||
| 54 | if (!evlist->cpus || !evlist->threads) { | 54 | if (!evlist->cpus || !evlist->threads) { |
| 55 | err = -ENOMEM; | 55 | err = -ENOMEM; |
| 56 | pr_debug("Not enough memory to create thread/cpu maps\n"); | 56 | pr_debug("Not enough memory to create thread/cpu maps\n"); |
| 57 | goto out_delete_maps; | 57 | goto out_delete_evlist; |
| 58 | } | 58 | } |
| 59 | 59 | ||
| 60 | if (perf_evlist__open(evlist)) { | 60 | if (perf_evlist__open(evlist)) { |
| @@ -63,14 +63,14 @@ static int __test__sw_clock_freq(enum perf_sw_ids clock_id) | |||
| 63 | err = -errno; | 63 | err = -errno; |
| 64 | pr_debug("Couldn't open evlist: %s\nHint: check %s, using %" PRIu64 " in this test.\n", | 64 | pr_debug("Couldn't open evlist: %s\nHint: check %s, using %" PRIu64 " in this test.\n", |
| 65 | strerror(errno), knob, (u64)attr.sample_freq); | 65 | strerror(errno), knob, (u64)attr.sample_freq); |
| 66 | goto out_delete_maps; | 66 | goto out_delete_evlist; |
| 67 | } | 67 | } |
| 68 | 68 | ||
| 69 | err = perf_evlist__mmap(evlist, 128, true); | 69 | err = perf_evlist__mmap(evlist, 128, true); |
| 70 | if (err < 0) { | 70 | if (err < 0) { |
| 71 | pr_debug("failed to mmap event: %d (%s)\n", errno, | 71 | pr_debug("failed to mmap event: %d (%s)\n", errno, |
| 72 | strerror(errno)); | 72 | strerror(errno)); |
| 73 | goto out_close_evlist; | 73 | goto out_delete_evlist; |
| 74 | } | 74 | } |
| 75 | 75 | ||
| 76 | perf_evlist__enable(evlist); | 76 | perf_evlist__enable(evlist); |
| @@ -90,7 +90,7 @@ static int __test__sw_clock_freq(enum perf_sw_ids clock_id) | |||
| 90 | err = perf_evlist__parse_sample(evlist, event, &sample); | 90 | err = perf_evlist__parse_sample(evlist, event, &sample); |
| 91 | if (err < 0) { | 91 | if (err < 0) { |
| 92 | pr_debug("Error during parse sample\n"); | 92 | pr_debug("Error during parse sample\n"); |
| 93 | goto out_unmap_evlist; | 93 | goto out_delete_evlist; |
| 94 | } | 94 | } |
| 95 | 95 | ||
| 96 | total_periods += sample.period; | 96 | total_periods += sample.period; |
| @@ -105,13 +105,7 @@ next_event: | |||
| 105 | err = -1; | 105 | err = -1; |
| 106 | } | 106 | } |
| 107 | 107 | ||
| 108 | out_unmap_evlist: | 108 | out_delete_evlist: |
| 109 | perf_evlist__munmap(evlist); | ||
| 110 | out_close_evlist: | ||
| 111 | perf_evlist__close(evlist); | ||
| 112 | out_delete_maps: | ||
| 113 | perf_evlist__delete_maps(evlist); | ||
| 114 | out_free_evlist: | ||
| 115 | perf_evlist__delete(evlist); | 109 | perf_evlist__delete(evlist); |
| 116 | return err; | 110 | return err; |
| 117 | } | 111 | } |
diff --git a/tools/perf/tests/task-exit.c b/tools/perf/tests/task-exit.c index d09ab579119e..5ff3db318f12 100644 --- a/tools/perf/tests/task-exit.c +++ b/tools/perf/tests/task-exit.c | |||
| @@ -9,12 +9,21 @@ | |||
| 9 | static int exited; | 9 | static int exited; |
| 10 | static int nr_exit; | 10 | static int nr_exit; |
| 11 | 11 | ||
| 12 | static void sig_handler(int sig) | 12 | static void sig_handler(int sig __maybe_unused) |
| 13 | { | 13 | { |
| 14 | exited = 1; | 14 | exited = 1; |
| 15 | } | ||
| 15 | 16 | ||
| 16 | if (sig == SIGUSR1) | 17 | /* |
| 17 | nr_exit = -1; | 18 | * perf_evlist__prepare_workload will send a SIGUSR1 if the fork fails, since |
| 19 | * we asked by setting its exec_error to this handler. | ||
| 20 | */ | ||
| 21 | static void workload_exec_failed_signal(int signo __maybe_unused, | ||
| 22 | siginfo_t *info __maybe_unused, | ||
| 23 | void *ucontext __maybe_unused) | ||
| 24 | { | ||
| 25 | exited = 1; | ||
| 26 | nr_exit = -1; | ||
| 18 | } | 27 | } |
| 19 | 28 | ||
| 20 | /* | 29 | /* |
| @@ -35,7 +44,6 @@ int test__task_exit(void) | |||
| 35 | const char *argv[] = { "true", NULL }; | 44 | const char *argv[] = { "true", NULL }; |
| 36 | 45 | ||
| 37 | signal(SIGCHLD, sig_handler); | 46 | signal(SIGCHLD, sig_handler); |
| 38 | signal(SIGUSR1, sig_handler); | ||
| 39 | 47 | ||
| 40 | evlist = perf_evlist__new_default(); | 48 | evlist = perf_evlist__new_default(); |
| 41 | if (evlist == NULL) { | 49 | if (evlist == NULL) { |
| @@ -54,13 +62,14 @@ int test__task_exit(void) | |||
| 54 | if (!evlist->cpus || !evlist->threads) { | 62 | if (!evlist->cpus || !evlist->threads) { |
| 55 | err = -ENOMEM; | 63 | err = -ENOMEM; |
| 56 | pr_debug("Not enough memory to create thread/cpu maps\n"); | 64 | pr_debug("Not enough memory to create thread/cpu maps\n"); |
| 57 | goto out_delete_maps; | 65 | goto out_delete_evlist; |
| 58 | } | 66 | } |
| 59 | 67 | ||
| 60 | err = perf_evlist__prepare_workload(evlist, &target, argv, false, true); | 68 | err = perf_evlist__prepare_workload(evlist, &target, argv, false, |
| 69 | workload_exec_failed_signal); | ||
| 61 | if (err < 0) { | 70 | if (err < 0) { |
| 62 | pr_debug("Couldn't run the workload!\n"); | 71 | pr_debug("Couldn't run the workload!\n"); |
| 63 | goto out_delete_maps; | 72 | goto out_delete_evlist; |
| 64 | } | 73 | } |
| 65 | 74 | ||
| 66 | evsel = perf_evlist__first(evlist); | 75 | evsel = perf_evlist__first(evlist); |
| @@ -74,13 +83,13 @@ int test__task_exit(void) | |||
| 74 | err = perf_evlist__open(evlist); | 83 | err = perf_evlist__open(evlist); |
| 75 | if (err < 0) { | 84 | if (err < 0) { |
| 76 | pr_debug("Couldn't open the evlist: %s\n", strerror(-err)); | 85 | pr_debug("Couldn't open the evlist: %s\n", strerror(-err)); |
| 77 | goto out_delete_maps; | 86 | goto out_delete_evlist; |
| 78 | } | 87 | } |
| 79 | 88 | ||
| 80 | if (perf_evlist__mmap(evlist, 128, true) < 0) { | 89 | if (perf_evlist__mmap(evlist, 128, true) < 0) { |
| 81 | pr_debug("failed to mmap events: %d (%s)\n", errno, | 90 | pr_debug("failed to mmap events: %d (%s)\n", errno, |
| 82 | strerror(errno)); | 91 | strerror(errno)); |
| 83 | goto out_close_evlist; | 92 | goto out_delete_evlist; |
| 84 | } | 93 | } |
| 85 | 94 | ||
| 86 | perf_evlist__start_workload(evlist); | 95 | perf_evlist__start_workload(evlist); |
| @@ -103,11 +112,7 @@ retry: | |||
| 103 | err = -1; | 112 | err = -1; |
| 104 | } | 113 | } |
| 105 | 114 | ||
| 106 | perf_evlist__munmap(evlist); | 115 | out_delete_evlist: |
| 107 | out_close_evlist: | ||
| 108 | perf_evlist__close(evlist); | ||
| 109 | out_delete_maps: | ||
| 110 | perf_evlist__delete_maps(evlist); | ||
| 111 | perf_evlist__delete(evlist); | 116 | perf_evlist__delete(evlist); |
| 112 | return err; | 117 | return err; |
| 113 | } | 118 | } |
