diff options
70 files changed, 397 insertions, 348 deletions
diff --git a/tools/perf/arch/arm/tests/arch-tests.c b/tools/perf/arch/arm/tests/arch-tests.c index 8276740f7ff8..2495b5770637 100644 --- a/tools/perf/arch/arm/tests/arch-tests.c +++ b/tools/perf/arch/arm/tests/arch-tests.c @@ -5,8 +5,8 @@ struct test *arch_tests[] = { #ifdef HAVE_DWARF_UNWIND_SUPPORT - &dwarf_unwind, + &suite__dwarf_unwind, #endif - &vectors_page, + &suite__vectors_page, NULL, }; diff --git a/tools/perf/arch/arm64/tests/arch-tests.c b/tools/perf/arch/arm64/tests/arch-tests.c index bc327048b807..6d137138a2de 100644 --- a/tools/perf/arch/arm64/tests/arch-tests.c +++ b/tools/perf/arch/arm64/tests/arch-tests.c @@ -5,7 +5,7 @@ struct test *arch_tests[] = { #ifdef HAVE_DWARF_UNWIND_SUPPORT - &dwarf_unwind, + &suite__dwarf_unwind, #endif NULL, }; diff --git a/tools/perf/arch/powerpc/tests/arch-tests.c b/tools/perf/arch/powerpc/tests/arch-tests.c index bc327048b807..6d137138a2de 100644 --- a/tools/perf/arch/powerpc/tests/arch-tests.c +++ b/tools/perf/arch/powerpc/tests/arch-tests.c @@ -5,7 +5,7 @@ struct test *arch_tests[] = { #ifdef HAVE_DWARF_UNWIND_SUPPORT - &dwarf_unwind, + &suite__dwarf_unwind, #endif NULL, }; diff --git a/tools/perf/arch/x86/tests/arch-tests.c b/tools/perf/arch/x86/tests/arch-tests.c index f5e3195768a4..20b1c0d8ca66 100644 --- a/tools/perf/arch/x86/tests/arch-tests.c +++ b/tools/perf/arch/x86/tests/arch-tests.c @@ -14,17 +14,17 @@ DEFINE_SUITE("x86 bp modify", bp_modify); DEFINE_SUITE("x86 Sample parsing", x86_sample_parsing); struct test *arch_tests[] = { - &rdpmc, + &suite__rdpmc, #ifdef HAVE_DWARF_UNWIND_SUPPORT - &dwarf_unwind, + &suite__dwarf_unwind, #endif #ifdef HAVE_AUXTRACE_SUPPORT - &insn_x86, - &intel_pt_pkt_decoder, + &suite__insn_x86, + &suite__intel_pt_pkt_decoder, #endif #if defined(__x86_64__) - &bp_modify, + &suite__bp_modify, #endif - &x86_sample_parsing, + &suite__x86_sample_parsing, NULL, }; diff --git a/tools/perf/tests/api-io.c b/tools/perf/tests/api-io.c index 2ada86ad6084..af4913967514 100644 --- a/tools/perf/tests/api-io.c +++ b/tools/perf/tests/api-io.c @@ -289,8 +289,8 @@ static int test_get_dec(void) return ret; } -int test__api_io(struct test *test __maybe_unused, - int subtest __maybe_unused) +static int test__api_io(struct test *test __maybe_unused, + int subtest __maybe_unused) { int ret = 0; @@ -302,3 +302,5 @@ int test__api_io(struct test *test __maybe_unused, ret = TEST_FAIL; return ret; } + +DEFINE_SUITE("Test api io", api_io); diff --git a/tools/perf/tests/attr.c b/tools/perf/tests/attr.c index 9b40a25376ae..f1461051f579 100644 --- a/tools/perf/tests/attr.c +++ b/tools/perf/tests/attr.c @@ -178,7 +178,7 @@ static int run_dir(const char *d, const char *perf) return system(cmd) ? TEST_FAIL : TEST_OK; } -int test__attr(struct test *test __maybe_unused, int subtest __maybe_unused) +static int test__attr(struct test *test __maybe_unused, int subtest __maybe_unused) { struct stat st; char path_perf[PATH_MAX]; @@ -207,3 +207,5 @@ int test__attr(struct test *test __maybe_unused, int subtest __maybe_unused) return TEST_SKIP; } + +DEFINE_SUITE("Setup struct perf_event_attr", attr); diff --git a/tools/perf/tests/backward-ring-buffer.c b/tools/perf/tests/backward-ring-buffer.c index 7447a4478991..131903a2054d 100644 --- a/tools/perf/tests/backward-ring-buffer.c +++ b/tools/perf/tests/backward-ring-buffer.c @@ -82,7 +82,7 @@ static int do_test(struct evlist *evlist, int mmap_pages, } -int test__backward_ring_buffer(struct test *test __maybe_unused, int subtest __maybe_unused) +static int test__backward_ring_buffer(struct test *test __maybe_unused, int subtest __maybe_unused) { int ret = TEST_SKIP, err, sample_count = 0, comm_count = 0; char pid[16], sbuf[STRERR_BUFSIZE]; @@ -167,3 +167,5 @@ out_delete_evlist: evlist__delete(evlist); return ret; } + +DEFINE_SUITE("Read backward ring buffer", backward_ring_buffer); diff --git a/tools/perf/tests/bitmap.c b/tools/perf/tests/bitmap.c index 12b805efdca0..13d1d1d6774f 100644 --- a/tools/perf/tests/bitmap.c +++ b/tools/perf/tests/bitmap.c @@ -40,7 +40,7 @@ static int test_bitmap(const char *str) return ret; } -int test__bitmap_print(struct test *test __maybe_unused, int subtest __maybe_unused) +static int test__bitmap_print(struct test *test __maybe_unused, int subtest __maybe_unused) { TEST_ASSERT_VAL("failed to convert map", test_bitmap("1")); TEST_ASSERT_VAL("failed to convert map", test_bitmap("1,5")); @@ -51,3 +51,5 @@ int test__bitmap_print(struct test *test __maybe_unused, int subtest __maybe_unu TEST_ASSERT_VAL("failed to convert map", test_bitmap("1-10,12-20,22-30,32-40")); return 0; } + +DEFINE_SUITE("Print bitmap", bitmap_print); diff --git a/tools/perf/tests/bp_account.c b/tools/perf/tests/bp_account.c index 489b50604cf2..76cf356ba13f 100644 --- a/tools/perf/tests/bp_account.c +++ b/tools/perf/tests/bp_account.c @@ -173,7 +173,7 @@ static int detect_share(int wp_cnt, int bp_cnt) * we create another watchpoint to ensure * the slot accounting is correct */ -int test__bp_accounting(struct test *test __maybe_unused, int subtest __maybe_unused) +static int test__bp_accounting(struct test *test __maybe_unused, int subtest __maybe_unused) { int has_ioctl = detect_ioctl(); int wp_cnt = detect_cnt(false); @@ -189,7 +189,7 @@ int test__bp_accounting(struct test *test __maybe_unused, int subtest __maybe_un return bp_accounting(wp_cnt, share); } -bool test__bp_account_is_supported(void) +static bool test__bp_account_is_supported(void) { /* * PowerPC and S390 do not support creation of instruction @@ -204,3 +204,9 @@ bool test__bp_account_is_supported(void) return true; #endif } + +struct test suite__bp_accounting = { + .desc = "Breakpoint accounting", + .func = test__bp_accounting, + .is_supported = test__bp_account_is_supported, +}; diff --git a/tools/perf/tests/bp_signal.c b/tools/perf/tests/bp_signal.c index ef37353636d8..c19b05488cfb 100644 --- a/tools/perf/tests/bp_signal.c +++ b/tools/perf/tests/bp_signal.c @@ -161,7 +161,7 @@ static long long bp_count(int fd) return count; } -int test__bp_signal(struct test *test __maybe_unused, int subtest __maybe_unused) +static int test__bp_signal(struct test *test __maybe_unused, int subtest __maybe_unused) { struct sigaction sa; long long count1, count2, count3; @@ -311,3 +311,9 @@ bool test__bp_signal_is_supported(void) return true; #endif } + +struct test suite__bp_signal = { + .desc = "Breakpoint overflow signal handler", + .func = test__bp_signal, + .is_supported = test__bp_signal_is_supported, +}; diff --git a/tools/perf/tests/bp_signal_overflow.c b/tools/perf/tests/bp_signal_overflow.c index eb4dbbddf4ff..99c30d028f5e 100644 --- a/tools/perf/tests/bp_signal_overflow.c +++ b/tools/perf/tests/bp_signal_overflow.c @@ -59,7 +59,7 @@ static long long bp_count(int fd) #define EXECUTIONS 10000 #define THRESHOLD 100 -int test__bp_signal_overflow(struct test *test __maybe_unused, int subtest __maybe_unused) +static int test__bp_signal_overflow(struct test *test __maybe_unused, int subtest __maybe_unused) { struct perf_event_attr pe; struct sigaction sa; @@ -133,3 +133,9 @@ int test__bp_signal_overflow(struct test *test __maybe_unused, int subtest __may return fails ? TEST_FAIL : TEST_OK; } + +struct test suite__bp_signal_overflow = { + .desc = "Breakpoint overflow sampling", + .func = test__bp_signal_overflow, + .is_supported = test__bp_signal_is_supported, +}; diff --git a/tools/perf/tests/bpf.c b/tools/perf/tests/bpf.c index 2bf146e49ce8..3f936864d0ee 100644 --- a/tools/perf/tests/bpf.c +++ b/tools/perf/tests/bpf.c @@ -283,12 +283,12 @@ out: return ret; } -int test__bpf_subtest_get_nr(void) +static int test__bpf_subtest_get_nr(void) { return (int)ARRAY_SIZE(bpf_testcase_table); } -const char *test__bpf_subtest_get_desc(int i) +static const char *test__bpf_subtest_get_desc(int i) { if (i < 0 || i >= (int)ARRAY_SIZE(bpf_testcase_table)) return NULL; @@ -325,7 +325,7 @@ static int check_env(void) return 0; } -int test__bpf(struct test *test __maybe_unused, int i) +static int test__bpf(struct test *test __maybe_unused, int i) { int err; @@ -345,19 +345,29 @@ int test__bpf(struct test *test __maybe_unused, int i) } #else -int test__bpf_subtest_get_nr(void) +static int test__bpf_subtest_get_nr(void) { return 0; } -const char *test__bpf_subtest_get_desc(int i __maybe_unused) +static const char *test__bpf_subtest_get_desc(int i __maybe_unused) { return NULL; } -int test__bpf(struct test *test __maybe_unused, int i __maybe_unused) +static int test__bpf(struct test *test __maybe_unused, int i __maybe_unused) { pr_debug("Skip BPF test because BPF support is not compiled\n"); return TEST_SKIP; } #endif + +struct test suite__bpf = { + .desc = "BPF filter", + .func = test__bpf, + .subtest = { + .skip_if_fail = true, + .get_nr = test__bpf_subtest_get_nr, + .get_desc = test__bpf_subtest_get_desc, + }, +}; diff --git a/tools/perf/tests/builtin-test.c b/tools/perf/tests/builtin-test.c index b2cbc12a70a2..07467ec43100 100644 --- a/tools/perf/tests/builtin-test.c +++ b/tools/perf/tests/builtin-test.c @@ -34,220 +34,79 @@ struct test *__weak arch_tests[] = { NULL, }; -DEFINE_SUITE("vmlinux symtab matches kallsyms", vmlinux_matches_kallsyms); -DEFINE_SUITE("Detect openat syscall event", openat_syscall_event); -DEFINE_SUITE("Detect openat syscall event on all cpus", openat_syscall_event_on_all_cpus); -DEFINE_SUITE("Read samples using the mmap interface", basic_mmap); -DEFINE_SUITE("Test data source output", mem); -DEFINE_SUITE("Parse event definition strings", parse_events); -DEFINE_SUITE("Simple expression parser", expr); -DEFINE_SUITE("PERF_RECORD_* events & perf_sample fields", PERF_RECORD); -DEFINE_SUITE("Parse perf pmu format", pmu); -static struct test pmu_events = { - .desc = "PMU events", - .func = test__pmu_events, - .subtest = { - .skip_if_fail = false, - .get_nr = test__pmu_events_subtest_get_nr, - .get_desc = test__pmu_events_subtest_get_desc, - .skip_reason = test__pmu_events_subtest_skip_reason, - }, -}; -DEFINE_SUITE("DSO data read", dso_data); -DEFINE_SUITE("DSO data cache", dso_data_cache); -DEFINE_SUITE("DSO data reopen", dso_data_reopen); -DEFINE_SUITE("Roundtrip evsel->name", perf_evsel__roundtrip_name_test); -DEFINE_SUITE("Parse sched tracepoints fields", perf_evsel__tp_sched_test); -DEFINE_SUITE("syscalls:sys_enter_openat event fields", syscall_openat_tp_fields); -DEFINE_SUITE("Setup struct perf_event_attr", attr); -DEFINE_SUITE("Match and link multiple hists", hists_link); -DEFINE_SUITE("'import perf' in python", python_use); -static struct test bp_signal = { - .desc = "Breakpoint overflow signal handler", - .func = test__bp_signal, - .is_supported = test__bp_signal_is_supported, -}; -static struct test bp_signal_overflow = { - .desc = "Breakpoint overflow sampling", - .func = test__bp_signal_overflow, - .is_supported = test__bp_signal_is_supported, -}; -static struct test bp_accounting = { - .desc = "Breakpoint accounting", - .func = test__bp_accounting, - .is_supported = test__bp_account_is_supported, -}; -static struct test wp = { - .desc = "Watchpoint", - .func = test__wp, - .is_supported = test__wp_is_supported, - .subtest = { - .skip_if_fail = false, - .get_nr = test__wp_subtest_get_nr, - .get_desc = test__wp_subtest_get_desc, - .skip_reason = test__wp_subtest_skip_reason, - }, -}; -DEFINE_SUITE("Number of exit events of a simple workload", task_exit); -DEFINE_SUITE("Software clock events period values", sw_clock_freq); -DEFINE_SUITE("Object code reading", code_reading); -DEFINE_SUITE("Sample parsing", sample_parsing); -DEFINE_SUITE("Use a dummy software event to keep tracking", keep_tracking); -DEFINE_SUITE("Parse with no sample_id_all bit set", parse_no_sample_id_all); -DEFINE_SUITE("Filter hist entries", hists_filter); -DEFINE_SUITE("Lookup mmap thread", mmap_thread_lookup); -DEFINE_SUITE("Share thread maps", thread_maps_share); -DEFINE_SUITE("Sort output of hist entries", hists_output); -DEFINE_SUITE("Cumulate child hist entries", hists_cumulate); -DEFINE_SUITE("Track with sched_switch", switch_tracking); -DEFINE_SUITE("Filter fds with revents mask in a fdarray", fdarray__filter); -DEFINE_SUITE("Add fd to a fdarray, making it autogrow", fdarray__add); -DEFINE_SUITE("kmod_path__parse", kmod_path__parse); -DEFINE_SUITE("Thread map", thread_map); -static struct test llvm = { - .desc = "LLVM search and compile", - .func = test__llvm, - .subtest = { - .skip_if_fail = true, - .get_nr = test__llvm_subtest_get_nr, - .get_desc = test__llvm_subtest_get_desc, - }, -}; -DEFINE_SUITE("Session topology", session_topology); -static struct test bpf = { - .desc = "BPF filter", - .func = test__bpf, - .subtest = { - .skip_if_fail = true, - .get_nr = test__bpf_subtest_get_nr, - .get_desc = test__bpf_subtest_get_desc, - }, -}; -DEFINE_SUITE("Synthesize thread map", thread_map_synthesize); -DEFINE_SUITE("Remove thread map", thread_map_remove); -DEFINE_SUITE("Synthesize cpu map", cpu_map_synthesize); -DEFINE_SUITE("Synthesize stat config", synthesize_stat_config); -DEFINE_SUITE("Synthesize stat", synthesize_stat); -DEFINE_SUITE("Synthesize stat round", synthesize_stat_round); -DEFINE_SUITE("Synthesize attr update", event_update); -DEFINE_SUITE("Event times", event_times); -DEFINE_SUITE("Read backward ring buffer", backward_ring_buffer); -DEFINE_SUITE("Print cpu map", cpu_map_print); -DEFINE_SUITE("Merge cpu map", cpu_map_merge); -DEFINE_SUITE("Probe SDT events", sdt_event); -DEFINE_SUITE("is_printable_array", is_printable_array); -DEFINE_SUITE("Print bitmap", bitmap_print); -DEFINE_SUITE("perf hooks", perf_hooks); -static struct test clang = { - .desc = "builtin clang support", - .func = test__clang, - .subtest = { - .skip_if_fail = true, - .get_nr = test__clang_subtest_get_nr, - .get_desc = test__clang_subtest_get_desc, - } -}; -DEFINE_SUITE("unit_number__scnprintf", unit_number__scnprint); -DEFINE_SUITE("mem2node", mem2node); -DEFINE_SUITE("time utils", time_utils); -DEFINE_SUITE("Test jit_write_elf", jit_write_elf); -static struct test pfm = { - .desc = "Test libpfm4 support", - .func = test__pfm, - .subtest = { - .skip_if_fail = true, - .get_nr = test__pfm_subtest_get_nr, - .get_desc = test__pfm_subtest_get_desc, - } -}; -DEFINE_SUITE("Test api io", api_io); -DEFINE_SUITE("maps__merge_in", maps__merge_in); -DEFINE_SUITE("Demangle Java", demangle_java); -DEFINE_SUITE("Demangle OCaml", demangle_ocaml); -DEFINE_SUITE("Parse and process metrics", parse_metric); -DEFINE_SUITE("PE file support", pe_file_parsing); -DEFINE_SUITE("Event expansion for cgroups", expand_cgroup_events); -static struct test perf_time_to_tsc = { - .desc = "Convert perf time to TSC", - .func = test__perf_time_to_tsc, - .is_supported = test__tsc_is_supported, -}; -DEFINE_SUITE("dlfilter C API", dlfilter); - - static struct test *generic_tests[] = { - &vmlinux_matches_kallsyms, - &openat_syscall_event, - &openat_syscall_event_on_all_cpus, - &basic_mmap, - &mem, - &parse_events, - &expr, - &PERF_RECORD, - &pmu, - &pmu_events, - &dso_data, - &dso_data_cache, - &dso_data_reopen, - &perf_evsel__roundtrip_name_test, - &perf_evsel__tp_sched_test, - &syscall_openat_tp_fields, - &attr, - &hists_link, - &python_use, - &bp_signal, - &bp_signal_overflow, - &bp_accounting, - &wp, - &task_exit, - &sw_clock_freq, - &code_reading, - &sample_parsing, - &keep_tracking, - &parse_no_sample_id_all, - &hists_filter, - &mmap_thread_lookup, - &thread_maps_share, - &hists_output, - &hists_cumulate, - &switch_tracking, - &fdarray__filter, - &fdarray__add, - &kmod_path__parse, - &thread_map, - &llvm, - &session_topology, - &bpf, - &thread_map_synthesize, - &thread_map_remove, - &cpu_map_synthesize, - &synthesize_stat_config, - &synthesize_stat, - &synthesize_stat_round, - &event_update, - &event_times, - &backward_ring_buffer, - &cpu_map_print, - &cpu_map_merge, - &sdt_event, - &is_printable_array, - &bitmap_print, - &perf_hooks, - &clang, - &unit_number__scnprint, - &mem2node, - &time_utils, - &jit_write_elf, - &pfm, - &api_io, - &maps__merge_in, - &demangle_java, - &demangle_ocaml, - &parse_metric, - &pe_file_parsing, - &expand_cgroup_events, - &perf_time_to_tsc, - &dlfilter, + &suite__vmlinux_matches_kallsyms, + &suite__openat_syscall_event, + &suite__openat_syscall_event_on_all_cpus, + &suite__basic_mmap, + &suite__mem, + &suite__parse_events, + &suite__expr, + &suite__PERF_RECORD, + &suite__pmu, + &suite__pmu_events, + &suite__dso_data, + &suite__dso_data_cache, + &suite__dso_data_reopen, + &suite__perf_evsel__roundtrip_name_test, + &suite__perf_evsel__tp_sched_test, + &suite__syscall_openat_tp_fields, + &suite__attr, + &su |