* [RFC PATCH 1/5] perf test: Use macro for "suite" declarations
2021-09-22 8:19 [RFC PATCH 0/5] Start aligning perf test with kunit style Ian Rogers
@ 2021-09-22 8:19 ` Ian Rogers
2021-09-22 8:19 ` [RFC PATCH 2/5] perf test: Use macro for "suite" definitions Ian Rogers
` (4 subsequent siblings)
5 siblings, 0 replies; 16+ messages in thread
From: Ian Rogers @ 2021-09-22 8:19 UTC (permalink / raw)
To: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Mark Rutland, Alexander Shishkin, Jiri Olsa, Namhyung Kim,
Jin Yao, John Garry, Paul A . Clarke, linux-perf-users,
linux-kernel, Brendan Higgins, Daniel Latypov, David Gow
Cc: eranian, Ian Rogers
Currently tests are setup in builtin-test with function pointers. Kunit
exposes tests as a kunit_suite with a null terminated array of test
cases. Use a macro to aid transition from one to the other in later changes.
Signed-off-by: Ian Rogers <irogers@google.com>
---
tools/perf/tests/tests.h | 151 ++++++++++++++++++++-------------------
1 file changed, 77 insertions(+), 74 deletions(-)
diff --git a/tools/perf/tests/tests.h b/tools/perf/tests/tests.h
index fe1306f58495..0846f66d67f9 100644
--- a/tools/perf/tests/tests.h
+++ b/tools/perf/tests/tests.h
@@ -40,94 +40,97 @@ struct test {
void *priv;
};
+#define DECLARE_SUITE(name) \
+ int test__##name(struct test *test, int subtest)
+
/* Tests */
-int test__vmlinux_matches_kallsyms(struct test *test, int subtest);
-int test__openat_syscall_event(struct test *test, int subtest);
-int test__openat_syscall_event_on_all_cpus(struct test *test, int subtest);
-int test__basic_mmap(struct test *test, int subtest);
-int test__PERF_RECORD(struct test *test, int subtest);
-int test__perf_evsel__roundtrip_name_test(struct test *test, int subtest);
-int test__perf_evsel__tp_sched_test(struct test *test, int subtest);
-int test__syscall_openat_tp_fields(struct test *test, int subtest);
-int test__pmu(struct test *test, int subtest);
-int test__pmu_events(struct test *test, int subtest);
+DECLARE_SUITE(vmlinux_matches_kallsyms);
+DECLARE_SUITE(openat_syscall_event);
+DECLARE_SUITE(openat_syscall_event_on_all_cpus);
+DECLARE_SUITE(basic_mmap);
+DECLARE_SUITE(PERF_RECORD);
+DECLARE_SUITE(perf_evsel__roundtrip_name_test);
+DECLARE_SUITE(perf_evsel__tp_sched_test);
+DECLARE_SUITE(syscall_openat_tp_fields);
+DECLARE_SUITE(pmu);
+DECLARE_SUITE(pmu_events);
const char *test__pmu_events_subtest_get_desc(int subtest);
const char *test__pmu_events_subtest_skip_reason(int subtest);
int test__pmu_events_subtest_get_nr(void);
-int test__attr(struct test *test, int subtest);
-int test__dso_data(struct test *test, int subtest);
-int test__dso_data_cache(struct test *test, int subtest);
-int test__dso_data_reopen(struct test *test, int subtest);
-int test__parse_events(struct test *test, int subtest);
-int test__hists_link(struct test *test, int subtest);
-int test__python_use(struct test *test, int subtest);
-int test__bp_signal(struct test *test, int subtest);
-int test__bp_signal_overflow(struct test *test, int subtest);
-int test__bp_accounting(struct test *test, int subtest);
-int test__wp(struct test *test, int subtest);
+DECLARE_SUITE(attr);
+DECLARE_SUITE(dso_data);
+DECLARE_SUITE(dso_data_cache);
+DECLARE_SUITE(dso_data_reopen);
+DECLARE_SUITE(parse_events);
+DECLARE_SUITE(hists_link);
+DECLARE_SUITE(python_use);
+DECLARE_SUITE(bp_signal);
+DECLARE_SUITE(bp_signal_overflow);
+DECLARE_SUITE(bp_accounting);
+DECLARE_SUITE(wp);
const char *test__wp_subtest_get_desc(int subtest);
const char *test__wp_subtest_skip_reason(int subtest);
int test__wp_subtest_get_nr(void);
-int test__task_exit(struct test *test, int subtest);
-int test__mem(struct test *test, int subtest);
-int test__sw_clock_freq(struct test *test, int subtest);
-int test__code_reading(struct test *test, int subtest);
-int test__sample_parsing(struct test *test, int subtest);
-int test__keep_tracking(struct test *test, int subtest);
-int test__parse_no_sample_id_all(struct test *test, int subtest);
-int test__dwarf_unwind(struct test *test, int subtest);
-int test__expr(struct test *test, int subtest);
-int test__hists_filter(struct test *test, int subtest);
-int test__mmap_thread_lookup(struct test *test, int subtest);
-int test__thread_maps_share(struct test *test, int subtest);
-int test__hists_output(struct test *test, int subtest);
-int test__hists_cumulate(struct test *test, int subtest);
-int test__switch_tracking(struct test *test, int subtest);
-int test__fdarray__filter(struct test *test, int subtest);
-int test__fdarray__add(struct test *test, int subtest);
-int test__kmod_path__parse(struct test *test, int subtest);
-int test__thread_map(struct test *test, int subtest);
-int test__llvm(struct test *test, int subtest);
+DECLARE_SUITE(task_exit);
+DECLARE_SUITE(mem);
+DECLARE_SUITE(sw_clock_freq);
+DECLARE_SUITE(code_reading);
+DECLARE_SUITE(sample_parsing);
+DECLARE_SUITE(keep_tracking);
+DECLARE_SUITE(parse_no_sample_id_all);
+DECLARE_SUITE(dwarf_unwind);
+DECLARE_SUITE(expr);
+DECLARE_SUITE(hists_filter);
+DECLARE_SUITE(mmap_thread_lookup);
+DECLARE_SUITE(thread_maps_share);
+DECLARE_SUITE(hists_output);
+DECLARE_SUITE(hists_cumulate);
+DECLARE_SUITE(switch_tracking);
+DECLARE_SUITE(fdarray__filter);
+DECLARE_SUITE(fdarray__add);
+DECLARE_SUITE(kmod_path__parse);
+DECLARE_SUITE(thread_map);
+DECLARE_SUITE(llvm);
const char *test__llvm_subtest_get_desc(int subtest);
int test__llvm_subtest_get_nr(void);
-int test__bpf(struct test *test, int subtest);
+DECLARE_SUITE(bpf);
const char *test__bpf_subtest_get_desc(int subtest);
int test__bpf_subtest_get_nr(void);
-int test__session_topology(struct test *test, int subtest);
-int test__thread_map_synthesize(struct test *test, int subtest);
-int test__thread_map_remove(struct test *test, int subtest);
-int test__cpu_map_synthesize(struct test *test, int subtest);
-int test__synthesize_stat_config(struct test *test, int subtest);
-int test__synthesize_stat(struct test *test, int subtest);
-int test__synthesize_stat_round(struct test *test, int subtest);
-int test__event_update(struct test *test, int subtest);
-int test__event_times(struct test *test, int subtest);
-int test__backward_ring_buffer(struct test *test, int subtest);
-int test__cpu_map_print(struct test *test, int subtest);
-int test__cpu_map_merge(struct test *test, int subtest);
-int test__sdt_event(struct test *test, int subtest);
-int test__is_printable_array(struct test *test, int subtest);
-int test__bitmap_print(struct test *test, int subtest);
-int test__perf_hooks(struct test *test, int subtest);
-int test__clang(struct test *test, int subtest);
+DECLARE_SUITE(session_topology);
+DECLARE_SUITE(thread_map_synthesize);
+DECLARE_SUITE(thread_map_remove);
+DECLARE_SUITE(cpu_map_synthesize);
+DECLARE_SUITE(synthesize_stat_config);
+DECLARE_SUITE(synthesize_stat);
+DECLARE_SUITE(synthesize_stat_round);
+DECLARE_SUITE(event_update);
+DECLARE_SUITE(event_times);
+DECLARE_SUITE(backward_ring_buffer);
+DECLARE_SUITE(cpu_map_print);
+DECLARE_SUITE(cpu_map_merge);
+DECLARE_SUITE(sdt_event);
+DECLARE_SUITE(is_printable_array);
+DECLARE_SUITE(bitmap_print);
+DECLARE_SUITE(perf_hooks);
+DECLARE_SUITE(clang);
const char *test__clang_subtest_get_desc(int subtest);
int test__clang_subtest_get_nr(void);
-int test__unit_number__scnprint(struct test *test, int subtest);
-int test__mem2node(struct test *t, int subtest);
-int test__maps__merge_in(struct test *t, int subtest);
-int test__time_utils(struct test *t, int subtest);
-int test__jit_write_elf(struct test *test, int subtest);
-int test__api_io(struct test *test, int subtest);
-int test__demangle_java(struct test *test, int subtest);
-int test__demangle_ocaml(struct test *test, int subtest);
-int test__pfm(struct test *test, int subtest);
+DECLARE_SUITE(unit_number__scnprint);
+DECLARE_SUITE(mem2node);
+DECLARE_SUITE(maps__merge_in);
+DECLARE_SUITE(time_utils);
+DECLARE_SUITE(jit_write_elf);
+DECLARE_SUITE(api_io);
+DECLARE_SUITE(demangle_java);
+DECLARE_SUITE(demangle_ocaml);
+DECLARE_SUITE(pfm);
const char *test__pfm_subtest_get_desc(int subtest);
int test__pfm_subtest_get_nr(void);
-int test__parse_metric(struct test *test, int subtest);
-int test__pe_file_parsing(struct test *test, int subtest);
-int test__expand_cgroup_events(struct test *test, int subtest);
-int test__perf_time_to_tsc(struct test *test, int subtest);
-int test__dlfilter(struct test *test, int subtest);
+DECLARE_SUITE(parse_metric);
+DECLARE_SUITE(pe_file_parsing);
+DECLARE_SUITE(expand_cgroup_events);
+DECLARE_SUITE(perf_time_to_tsc);
+DECLARE_SUITE(dlfilter);
bool test__bp_signal_is_supported(void);
bool test__bp_account_is_supported(void);
@@ -142,7 +145,7 @@ int test__arch_unwind_sample(struct perf_sample *sample,
#endif
#if defined(__arm__)
-int test__vectors_page(struct test *test, int subtest);
+DECLARE_SUITE(vectors_page);
#endif
#endif /* TESTS_H */
--
2.33.0.464.g1972c5931b-goog
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [RFC PATCH 2/5] perf test: Use macro for "suite" definitions
2021-09-22 8:19 [RFC PATCH 0/5] Start aligning perf test with kunit style Ian Rogers
2021-09-22 8:19 ` [RFC PATCH 1/5] perf test: Use macro for "suite" declarations Ian Rogers
@ 2021-09-22 8:19 ` Ian Rogers
2021-09-22 8:19 ` [RFC PATCH 3/5] perf test: Make each test/suite its own struct Ian Rogers
` (3 subsequent siblings)
5 siblings, 0 replies; 16+ messages in thread
From: Ian Rogers @ 2021-09-22 8:19 UTC (permalink / raw)
To: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Mark Rutland, Alexander Shishkin, Jiri Olsa, Namhyung Kim,
Jin Yao, John Garry, Paul A . Clarke, linux-perf-users,
linux-kernel, Brendan Higgins, Daniel Latypov, David Gow
Cc: eranian, Ian Rogers
Add a macro to simplify later refactoring. No functional change.
Signed-off-by: Ian Rogers <irogers@google.com>
---
tools/perf/tests/builtin-test.c | 479 ++++++++++----------------------
1 file changed, 149 insertions(+), 330 deletions(-)
diff --git a/tools/perf/tests/builtin-test.c b/tools/perf/tests/builtin-test.c
index da7dc5e45d0c..820fc1ae2210 100644
--- a/tools/perf/tests/builtin-test.c
+++ b/tools/perf/tests/builtin-test.c
@@ -36,337 +36,156 @@ struct test __weak arch_tests[] = {
},
};
-static struct test generic_tests[] = {
- {
- .desc = "vmlinux symtab matches kallsyms",
- .func = test__vmlinux_matches_kallsyms,
- },
- {
- .desc = "Detect openat syscall event",
- .func = test__openat_syscall_event,
- },
- {
- .desc = "Detect openat syscall event on all cpus",
- .func = test__openat_syscall_event_on_all_cpus,
- },
- {
- .desc = "Read samples using the mmap interface",
- .func = test__basic_mmap,
- },
- {
- .desc = "Test data source output",
- .func = test__mem,
- },
- {
- .desc = "Parse event definition strings",
- .func = test__parse_events,
- },
- {
- .desc = "Simple expression parser",
- .func = test__expr,
- },
- {
- .desc = "PERF_RECORD_* events & perf_sample fields",
- .func = test__PERF_RECORD,
- },
- {
- .desc = "Parse perf pmu format",
- .func = test__pmu,
- },
- {
- .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,
- },
-
- },
- {
- .desc = "DSO data read",
- .func = test__dso_data,
- },
- {
- .desc = "DSO data cache",
- .func = test__dso_data_cache,
- },
- {
- .desc = "DSO data reopen",
- .func = test__dso_data_reopen,
- },
- {
- .desc = "Roundtrip evsel->name",
- .func = test__perf_evsel__roundtrip_name_test,
- },
- {
- .desc = "Parse sched tracepoints fields",
- .func = test__perf_evsel__tp_sched_test,
- },
- {
- .desc = "syscalls:sys_enter_openat event fields",
- .func = test__syscall_openat_tp_fields,
- },
- {
- .desc = "Setup struct perf_event_attr",
- .func = test__attr,
- },
- {
- .desc = "Match and link multiple hists",
- .func = test__hists_link,
- },
- {
- .desc = "'import perf' in python",
- .func = test__python_use,
- },
- {
- .desc = "Breakpoint overflow signal handler",
- .func = test__bp_signal,
- .is_supported = test__bp_signal_is_supported,
- },
- {
- .desc = "Breakpoint overflow sampling",
- .func = test__bp_signal_overflow,
- .is_supported = test__bp_signal_is_supported,
- },
- {
- .desc = "Breakpoint accounting",
- .func = test__bp_accounting,
- .is_supported = test__bp_account_is_supported,
- },
- {
- .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,
- },
- },
- {
- .desc = "Number of exit events of a simple workload",
- .func = test__task_exit,
- },
- {
- .desc = "Software clock events period values",
- .func = test__sw_clock_freq,
- },
- {
- .desc = "Object code reading",
- .func = test__code_reading,
- },
- {
- .desc = "Sample parsing",
- .func = test__sample_parsing,
- },
- {
- .desc = "Use a dummy software event to keep tracking",
- .func = test__keep_tracking,
- },
- {
- .desc = "Parse with no sample_id_all bit set",
- .func = test__parse_no_sample_id_all,
- },
- {
- .desc = "Filter hist entries",
- .func = test__hists_filter,
- },
- {
- .desc = "Lookup mmap thread",
- .func = test__mmap_thread_lookup,
- },
- {
- .desc = "Share thread maps",
- .func = test__thread_maps_share,
- },
- {
- .desc = "Sort output of hist entries",
- .func = test__hists_output,
- },
- {
- .desc = "Cumulate child hist entries",
- .func = test__hists_cumulate,
- },
- {
- .desc = "Track with sched_switch",
- .func = test__switch_tracking,
- },
- {
- .desc = "Filter fds with revents mask in a fdarray",
- .func = test__fdarray__filter,
- },
- {
- .desc = "Add fd to a fdarray, making it autogrow",
- .func = test__fdarray__add,
- },
- {
- .desc = "kmod_path__parse",
- .func = test__kmod_path__parse,
- },
- {
- .desc = "Thread map",
- .func = test__thread_map,
- },
- {
- .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,
- },
- },
- {
- .desc = "Session topology",
- .func = test__session_topology,
- },
- {
- .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,
- },
- },
- {
- .desc = "Synthesize thread map",
- .func = test__thread_map_synthesize,
- },
- {
- .desc = "Remove thread map",
- .func = test__thread_map_remove,
- },
- {
- .desc = "Synthesize cpu map",
- .func = test__cpu_map_synthesize,
- },
- {
- .desc = "Synthesize stat config",
- .func = test__synthesize_stat_config,
- },
- {
- .desc = "Synthesize stat",
- .func = test__synthesize_stat,
- },
- {
- .desc = "Synthesize stat round",
- .func = test__synthesize_stat_round,
- },
- {
- .desc = "Synthesize attr update",
- .func = test__event_update,
- },
- {
- .desc = "Event times",
- .func = test__event_times,
- },
- {
- .desc = "Read backward ring buffer",
- .func = test__backward_ring_buffer,
- },
- {
- .desc = "Print cpu map",
- .func = test__cpu_map_print,
- },
- {
- .desc = "Merge cpu map",
- .func = test__cpu_map_merge,
- },
+#define DEFINE_SUITE(description, name) \
+ { \
+ .desc = description, \
+ .func = test__##name, \
+ }
- {
- .desc = "Probe SDT events",
- .func = test__sdt_event,
- },
- {
- .desc = "is_printable_array",
- .func = test__is_printable_array,
- },
- {
- .desc = "Print bitmap",
- .func = test__bitmap_print,
- },
- {
- .desc = "perf hooks",
- .func = test__perf_hooks,
- },
- {
- .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,
- }
- },
- {
- .desc = "unit_number__scnprintf",
- .func = test__unit_number__scnprint,
- },
- {
- .desc = "mem2node",
- .func = test__mem2node,
- },
- {
- .desc = "time utils",
- .func = test__time_utils,
- },
- {
- .desc = "Test jit_write_elf",
- .func = test__jit_write_elf,
- },
- {
- .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,
- }
- },
- {
- .desc = "Test api io",
- .func = test__api_io,
- },
- {
- .desc = "maps__merge_in",
- .func = test__maps__merge_in,
- },
- {
- .desc = "Demangle Java",
- .func = test__demangle_java,
- },
- {
- .desc = "Demangle OCaml",
- .func = test__demangle_ocaml,
- },
- {
- .desc = "Parse and process metrics",
- .func = test__parse_metric,
- },
- {
- .desc = "PE file support",
- .func = test__pe_file_parsing,
- },
- {
- .desc = "Event expansion for cgroups",
- .func = test__expand_cgroup_events,
- },
- {
- .desc = "Convert perf time to TSC",
- .func = test__perf_time_to_tsc,
- .is_supported = test__tsc_is_supported,
- },
- {
- .desc = "dlfilter C API",
- .func = test__dlfilter,
- },
- {
- .func = NULL,
- },
+static struct test generic_tests[] = {
+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),
+{
+ .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),
+{
+ .desc = "Breakpoint overflow signal handler",
+ .func = test__bp_signal,
+ .is_supported = test__bp_signal_is_supported,
+},
+{
+ .desc = "Breakpoint overflow sampling",
+ .func = test__bp_signal_overflow,
+ .is_supported = test__bp_signal_is_supported,
+},
+{
+ .desc = "Breakpoint accounting",
+ .func = test__bp_accounting,
+ .is_supported = test__bp_account_is_supported,
+},
+{
+ .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),
+{
+ .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),
+{
+ .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),
+{
+ .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),
+{
+ .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),
+{
+ .desc = "Convert perf time to TSC",
+ .func = test__perf_time_to_tsc,
+ .is_supported = test__tsc_is_supported,
+},
+DEFINE_SUITE("dlfilter C API", dlfilter),
+{
+ .func = NULL,
+},
};
static struct test *tests[] = {
--
2.33.0.464.g1972c5931b-goog
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [RFC PATCH 3/5] perf test: Make each test/suite its own struct.
2021-09-22 8:19 [RFC PATCH 0/5] Start aligning perf test with kunit style Ian Rogers
2021-09-22 8:19 ` [RFC PATCH 1/5] perf test: Use macro for "suite" declarations Ian Rogers
2021-09-22 8:19 ` [RFC PATCH 2/5] perf test: Use macro for "suite" definitions Ian Rogers
@ 2021-09-22 8:19 ` Ian Rogers
2021-09-26 21:12 ` Jiri Olsa
2021-09-22 8:19 ` [RFC PATCH 4/5] perf test: Move each test suite struct to its test Ian Rogers
` (2 subsequent siblings)
5 siblings, 1 reply; 16+ messages in thread
From: Ian Rogers @ 2021-09-22 8:19 UTC (permalink / raw)
To: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Mark Rutland, Alexander Shishkin, Jiri Olsa, Namhyung Kim,
Jin Yao, John Garry, Paul A . Clarke, linux-perf-users,
linux-kernel, Brendan Higgins, Daniel Latypov, David Gow
Cc: eranian, Ian Rogers
By switching to an array of pointers to tests (later to be suites)
the definition of the tests can be moved to the file containing the
tests.
Signed-off-by: Ian Rogers <irogers@google.com>
---
tools/perf/arch/arm/include/arch-tests.h | 2 +-
tools/perf/arch/arm/tests/arch-tests.c | 21 +-
tools/perf/arch/arm64/include/arch-tests.h | 2 +-
tools/perf/arch/arm64/tests/arch-tests.c | 15 +-
tools/perf/arch/powerpc/include/arch-tests.h | 2 +-
tools/perf/arch/powerpc/tests/arch-tests.c | 15 +-
tools/perf/arch/x86/include/arch-tests.h | 2 +-
tools/perf/arch/x86/tests/arch-tests.c | 47 ++--
tools/perf/tests/builtin-test.c | 273 ++++++++++++-------
tools/perf/tests/tests.h | 6 +
10 files changed, 220 insertions(+), 165 deletions(-)
diff --git a/tools/perf/arch/arm/include/arch-tests.h b/tools/perf/arch/arm/include/arch-tests.h
index c62538052404..37039e80f18b 100644
--- a/tools/perf/arch/arm/include/arch-tests.h
+++ b/tools/perf/arch/arm/include/arch-tests.h
@@ -2,6 +2,6 @@
#ifndef ARCH_TESTS_H
#define ARCH_TESTS_H
-extern struct test arch_tests[];
+extern struct test *arch_tests[];
#endif
diff --git a/tools/perf/arch/arm/tests/arch-tests.c b/tools/perf/arch/arm/tests/arch-tests.c
index 6848101a855f..4374b0293177 100644
--- a/tools/perf/arch/arm/tests/arch-tests.c
+++ b/tools/perf/arch/arm/tests/arch-tests.c
@@ -3,18 +3,15 @@
#include "tests/tests.h"
#include "arch-tests.h"
-struct test arch_tests[] = {
#ifdef HAVE_DWARF_UNWIND_SUPPORT
- {
- .desc = "DWARF unwind",
- .func = test__dwarf_unwind,
- },
+DEFINE_SUITE("DWARF unwind", dwarf_unwind);
#endif
- {
- .desc = "Vectors page",
- .func = test__vectors_page,
- },
- {
- .func = NULL,
- },
+DEFINE_SUITE("Vectors page", vectors_page);
+
+struct test *arch_tests[] = {
+#ifdef HAVE_DWARF_UNWIND_SUPPORT
+ &dwarf_unwind,
+#endif
+ &vectors_pages,
+ NULL,
};
diff --git a/tools/perf/arch/arm64/include/arch-tests.h b/tools/perf/arch/arm64/include/arch-tests.h
index c62538052404..37039e80f18b 100644
--- a/tools/perf/arch/arm64/include/arch-tests.h
+++ b/tools/perf/arch/arm64/include/arch-tests.h
@@ -2,6 +2,6 @@
#ifndef ARCH_TESTS_H
#define ARCH_TESTS_H
-extern struct test arch_tests[];
+extern struct test *arch_tests[];
#endif
diff --git a/tools/perf/arch/arm64/tests/arch-tests.c b/tools/perf/arch/arm64/tests/arch-tests.c
index 5b1543c98022..8d32a62dcc55 100644
--- a/tools/perf/arch/arm64/tests/arch-tests.c
+++ b/tools/perf/arch/arm64/tests/arch-tests.c
@@ -3,14 +3,13 @@
#include "tests/tests.h"
#include "arch-tests.h"
-struct test arch_tests[] = {
#ifdef HAVE_DWARF_UNWIND_SUPPORT
- {
- .desc = "DWARF unwind",
- .func = test__dwarf_unwind,
- },
+DEFINE_SUITE("DWARF unwind", dwarf_unwind);
#endif
- {
- .func = NULL,
- },
+
+struct test *arch_tests[] = {
+#ifdef HAVE_DWARF_UNWIND_SUPPORT
+ &dwarf_unwind,
+#endif
+ NULL,
};
diff --git a/tools/perf/arch/powerpc/include/arch-tests.h b/tools/perf/arch/powerpc/include/arch-tests.h
index c62538052404..37039e80f18b 100644
--- a/tools/perf/arch/powerpc/include/arch-tests.h
+++ b/tools/perf/arch/powerpc/include/arch-tests.h
@@ -2,6 +2,6 @@
#ifndef ARCH_TESTS_H
#define ARCH_TESTS_H
-extern struct test arch_tests[];
+extern struct test *arch_tests[];
#endif
diff --git a/tools/perf/arch/powerpc/tests/arch-tests.c b/tools/perf/arch/powerpc/tests/arch-tests.c
index 8c3fbd4af817..8d32a62dcc55 100644
--- a/tools/perf/arch/powerpc/tests/arch-tests.c
+++ b/tools/perf/arch/powerpc/tests/arch-tests.c
@@ -3,14 +3,13 @@
#include "tests/tests.h"
#include "arch-tests.h"
-struct test arch_tests[] = {
#ifdef HAVE_DWARF_UNWIND_SUPPORT
- {
- .desc = "Test dwarf unwind",
- .func = test__dwarf_unwind,
- },
+DEFINE_SUITE("DWARF unwind", dwarf_unwind);
#endif
- {
- .func = NULL,
- },
+
+struct test *arch_tests[] = {
+#ifdef HAVE_DWARF_UNWIND_SUPPORT
+ &dwarf_unwind,
+#endif
+ NULL,
};
diff --git a/tools/perf/arch/x86/include/arch-tests.h b/tools/perf/arch/x86/include/arch-tests.h
index 9599e7a3f1af..d6db9f72b6af 100644
--- a/tools/perf/arch/x86/include/arch-tests.h
+++ b/tools/perf/arch/x86/include/arch-tests.h
@@ -11,6 +11,6 @@ int test__intel_pt_pkt_decoder(struct test *test, int subtest);
int test__bp_modify(struct test *test, int subtest);
int test__x86_sample_parsing(struct test *test, int subtest);
-extern struct test arch_tests[];
+extern struct test *arch_tests[];
#endif
diff --git a/tools/perf/arch/x86/tests/arch-tests.c b/tools/perf/arch/x86/tests/arch-tests.c
index 71aa67367ad6..c5444a4f76b9 100644
--- a/tools/perf/arch/x86/tests/arch-tests.c
+++ b/tools/perf/arch/x86/tests/arch-tests.c
@@ -3,39 +3,30 @@
#include "tests/tests.h"
#include "arch-tests.h"
-struct test arch_tests[] = {
- {
- .desc = "x86 rdpmc",
- .func = test__rdpmc,
- },
+DEFINE_SUITE("x86 rdpmc", rdpmc);
#ifdef HAVE_DWARF_UNWIND_SUPPORT
- {
- .desc = "DWARF unwind",
- .func = test__dwarf_unwind,
- },
+DEFINE_SUITE("DWARF unwind", dwarf_unwind);
#endif
#ifdef HAVE_AUXTRACE_SUPPORT
- {
- .desc = "x86 instruction decoder - new instructions",
- .func = test__insn_x86,
- },
- {
- .desc = "Intel PT packet decoder",
- .func = test__intel_pt_pkt_decoder,
- },
+DEFINE_SUITE("x86 instruction decoder - new instructions", insn_x86);
+DEFINE_SUITE("Intel PT packet decoder", intel_pt_pkt_decoder);
#endif
#if defined(__x86_64__)
- {
- .desc = "x86 bp modify",
- .func = test__bp_modify,
- },
+DEFINE_SUITE("x86 bp modify", bp_modify);
#endif
- {
- .desc = "x86 Sample parsing",
- .func = test__x86_sample_parsing,
- },
- {
- .func = NULL,
- },
+DEFINE_SUITE("x86 Sample parsing", x86_sample_parsing);
+struct test *arch_tests[] = {
+ &rdpmc,
+#ifdef HAVE_DWARF_UNWIND_SUPPORT
+ &dwarf_unwind,
+#endif
+#ifdef HAVE_AUXTRACE_SUPPORT
+ &insn_x86,
+ &intel_pt_pkt_decoder,
+#endif
+#if defined(__x86_64__)
+ &bp_modify,
+#endif
+ &x86_sample_parsing,
};
diff --git a/tools/perf/tests/builtin-test.c b/tools/perf/tests/builtin-test.c
index 820fc1ae2210..b2cbc12a70a2 100644
--- a/tools/perf/tests/builtin-test.c
+++ b/tools/perf/tests/builtin-test.c
@@ -30,29 +30,20 @@
static bool dont_fork;
-struct test __weak arch_tests[] = {
- {
- .func = NULL,
- },
+struct test *__weak arch_tests[] = {
+ NULL,
};
-#define DEFINE_SUITE(description, name) \
- { \
- .desc = description, \
- .func = test__##name, \
- }
-
-static struct test generic_tests[] = {
-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),
-{
+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 = {
@@ -61,33 +52,32 @@ DEFINE_SUITE("Parse perf pmu format", pmu),
.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),
-{
+};
+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,
@@ -97,24 +87,24 @@ DEFINE_SUITE("'import perf' in python", python_use),
.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),
-{
+};
+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 = {
@@ -122,9 +112,9 @@ DEFINE_SUITE("Thread map", thread_map),
.get_nr = test__llvm_subtest_get_nr,
.get_desc = test__llvm_subtest_get_desc,
},
-},
-DEFINE_SUITE("Session topology", session_topology),
-{
+};
+DEFINE_SUITE("Session topology", session_topology);
+static struct test bpf = {
.desc = "BPF filter",
.func = test__bpf,
.subtest = {
@@ -132,23 +122,23 @@ DEFINE_SUITE("Session topology", session_topology),
.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),
-{
+};
+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 = {
@@ -156,12 +146,12 @@ DEFINE_SUITE("perf hooks", perf_hooks),
.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),
-{
+};
+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 = {
@@ -169,26 +159,99 @@ DEFINE_SUITE("Test jit_write_elf", jit_write_elf),
.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),
-{
+};
+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),
-{
- .func = NULL,
-},
+};
+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,
+ NULL,
};
-static struct test *tests[] = {
+static struct test **tests[] = {
generic_tests,
arch_tests,
};
@@ -269,9 +332,9 @@ static int run_test(struct test *test, int subtest)
return err;
}
-#define for_each_test(j, t) \
+#define for_each_test(j, k, t) \
for (j = 0; j < ARRAY_SIZE(tests); j++) \
- for (t = &tests[j][0]; t->func; t++)
+ for (k = 0, t = tests[j][k]; tests[j][k]; k++, t = tests[j][k])
static int test_and_print(struct test *t, bool force_skip, int subtest)
{
@@ -470,18 +533,18 @@ static int run_shell_tests(int argc, const char *argv[], int i, int width,
static int __cmd_test(int argc, const char *argv[], struct intlist *skiplist)
{
struct test *t;
- unsigned int j;
+ unsigned int j, k;
int i = 0;
int width = shell_tests__max_desc_width();
- for_each_test(j, t) {
+ for_each_test(j, k, t) {
int len = strlen(t->desc);
if (width < len)
width = len;
}
- for_each_test(j, t) {
+ for_each_test(j, k, t) {
int curr = i++, err;
int subi;
@@ -597,11 +660,11 @@ static int perf_test__list_shell(int argc, const char **argv, int i)
static int perf_test__list(int argc, const char **argv)
{
- unsigned int j;
+ unsigned int j, k;
struct test *t;
int i = 0;
- for_each_test(j, t) {
+ for_each_test(j, k, t) {
int curr = i++;
if (!perf_test__matches(t->desc, curr, argc, argv) ||
diff --git a/tools/perf/tests/tests.h b/tools/perf/tests/tests.h
index 0846f66d67f9..469d305d425c 100644
--- a/tools/perf/tests/tests.h
+++ b/tools/perf/tests/tests.h
@@ -43,6 +43,12 @@ struct test {
#define DECLARE_SUITE(name) \
int test__##name(struct test *test, int subtest)
+#define DEFINE_SUITE(description, name) \
+ static struct test name = { \
+ .desc = description, \
+ .func = test__##name, \
+ };
+
/* Tests */
DECLARE_SUITE(vmlinux_matches_kallsyms);
DECLARE_SUITE(openat_syscall_event);
--
2.33.0.464.g1972c5931b-goog
^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [RFC PATCH 3/5] perf test: Make each test/suite its own struct.
2021-09-22 8:19 ` [RFC PATCH 3/5] perf test: Make each test/suite its own struct Ian Rogers
@ 2021-09-26 21:12 ` Jiri Olsa
2021-09-27 16:08 ` Ian Rogers
0 siblings, 1 reply; 16+ messages in thread
From: Jiri Olsa @ 2021-09-26 21:12 UTC (permalink / raw)
To: Ian Rogers
Cc: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Mark Rutland, Alexander Shishkin, Namhyung Kim, Jin Yao,
John Garry, Paul A . Clarke, linux-perf-users, linux-kernel,
Brendan Higgins, Daniel Latypov, David Gow, eranian
On Wed, Sep 22, 2021 at 01:19:56AM -0700, Ian Rogers wrote:
> By switching to an array of pointers to tests (later to be suites)
> the definition of the tests can be moved to the file containing the
> tests.
>
> Signed-off-by: Ian Rogers <irogers@google.com>
> ---
> tools/perf/arch/arm/include/arch-tests.h | 2 +-
> tools/perf/arch/arm/tests/arch-tests.c | 21 +-
> tools/perf/arch/arm64/include/arch-tests.h | 2 +-
> tools/perf/arch/arm64/tests/arch-tests.c | 15 +-
> tools/perf/arch/powerpc/include/arch-tests.h | 2 +-
> tools/perf/arch/powerpc/tests/arch-tests.c | 15 +-
> tools/perf/arch/x86/include/arch-tests.h | 2 +-
> tools/perf/arch/x86/tests/arch-tests.c | 47 ++--
> tools/perf/tests/builtin-test.c | 273 ++++++++++++-------
> tools/perf/tests/tests.h | 6 +
> 10 files changed, 220 insertions(+), 165 deletions(-)
>
> diff --git a/tools/perf/arch/arm/include/arch-tests.h b/tools/perf/arch/arm/include/arch-tests.h
> index c62538052404..37039e80f18b 100644
> --- a/tools/perf/arch/arm/include/arch-tests.h
> +++ b/tools/perf/arch/arm/include/arch-tests.h
> @@ -2,6 +2,6 @@
> #ifndef ARCH_TESTS_H
> #define ARCH_TESTS_H
>
> -extern struct test arch_tests[];
> +extern struct test *arch_tests[];
>
> #endif
> diff --git a/tools/perf/arch/arm/tests/arch-tests.c b/tools/perf/arch/arm/tests/arch-tests.c
> index 6848101a855f..4374b0293177 100644
> --- a/tools/perf/arch/arm/tests/arch-tests.c
> +++ b/tools/perf/arch/arm/tests/arch-tests.c
> @@ -3,18 +3,15 @@
> #include "tests/tests.h"
> #include "arch-tests.h"
>
> -struct test arch_tests[] = {
> #ifdef HAVE_DWARF_UNWIND_SUPPORT
> - {
> - .desc = "DWARF unwind",
> - .func = test__dwarf_unwind,
> - },
> +DEFINE_SUITE("DWARF unwind", dwarf_unwind);
why not having this and other in here DEFINE_SUITE in
tests/dwarf-unwind.c ? it seems to get compiled in only
for supported arch
jirka
> #endif
> - {
> - .desc = "Vectors page",
> - .func = test__vectors_page,
> - },
> - {
> - .func = NULL,
> - },
> +DEFINE_SUITE("Vectors page", vectors_page);
> +
> +struct test *arch_tests[] = {
> +#ifdef HAVE_DWARF_UNWIND_SUPPORT
> + &dwarf_unwind,
> +#endif
> + &vectors_pages,
> + NULL,
> };
SNIP
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [RFC PATCH 3/5] perf test: Make each test/suite its own struct.
2021-09-26 21:12 ` Jiri Olsa
@ 2021-09-27 16:08 ` Ian Rogers
2021-09-28 20:07 ` Jiri Olsa
0 siblings, 1 reply; 16+ messages in thread
From: Ian Rogers @ 2021-09-27 16:08 UTC (permalink / raw)
To: Jiri Olsa
Cc: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Mark Rutland, Alexander Shishkin, Namhyung Kim, Jin Yao,
John Garry, Paul A . Clarke, linux-perf-users, linux-kernel,
Brendan Higgins, Daniel Latypov, David Gow, eranian
On Sun, Sep 26, 2021 at 2:12 PM Jiri Olsa <jolsa@redhat.com> wrote:
>
> On Wed, Sep 22, 2021 at 01:19:56AM -0700, Ian Rogers wrote:
> > By switching to an array of pointers to tests (later to be suites)
> > the definition of the tests can be moved to the file containing the
> > tests.
> >
> > Signed-off-by: Ian Rogers <irogers@google.com>
> > ---
> > tools/perf/arch/arm/include/arch-tests.h | 2 +-
> > tools/perf/arch/arm/tests/arch-tests.c | 21 +-
> > tools/perf/arch/arm64/include/arch-tests.h | 2 +-
> > tools/perf/arch/arm64/tests/arch-tests.c | 15 +-
> > tools/perf/arch/powerpc/include/arch-tests.h | 2 +-
> > tools/perf/arch/powerpc/tests/arch-tests.c | 15 +-
> > tools/perf/arch/x86/include/arch-tests.h | 2 +-
> > tools/perf/arch/x86/tests/arch-tests.c | 47 ++--
> > tools/perf/tests/builtin-test.c | 273 ++++++++++++-------
> > tools/perf/tests/tests.h | 6 +
> > 10 files changed, 220 insertions(+), 165 deletions(-)
> >
> > diff --git a/tools/perf/arch/arm/include/arch-tests.h b/tools/perf/arch/arm/include/arch-tests.h
> > index c62538052404..37039e80f18b 100644
> > --- a/tools/perf/arch/arm/include/arch-tests.h
> > +++ b/tools/perf/arch/arm/include/arch-tests.h
> > @@ -2,6 +2,6 @@
> > #ifndef ARCH_TESTS_H
> > #define ARCH_TESTS_H
> >
> > -extern struct test arch_tests[];
> > +extern struct test *arch_tests[];
> >
> > #endif
> > diff --git a/tools/perf/arch/arm/tests/arch-tests.c b/tools/perf/arch/arm/tests/arch-tests.c
> > index 6848101a855f..4374b0293177 100644
> > --- a/tools/perf/arch/arm/tests/arch-tests.c
> > +++ b/tools/perf/arch/arm/tests/arch-tests.c
> > @@ -3,18 +3,15 @@
> > #include "tests/tests.h"
> > #include "arch-tests.h"
> >
> > -struct test arch_tests[] = {
> > #ifdef HAVE_DWARF_UNWIND_SUPPORT
> > - {
> > - .desc = "DWARF unwind",
> > - .func = test__dwarf_unwind,
> > - },
> > +DEFINE_SUITE("DWARF unwind", dwarf_unwind);
>
> why not having this and other in here DEFINE_SUITE in
> tests/dwarf-unwind.c ? it seems to get compiled in only
> for supported arch
Not sure I follow. In these changes I've just tried to move things
around without changing the logic behind things. This sounds like a
sensible follow up clean up.
Thanks,
Ian
> jirka
>
> > #endif
> > - {
> > - .desc = "Vectors page",
> > - .func = test__vectors_page,
> > - },
> > - {
> > - .func = NULL,
> > - },
> > +DEFINE_SUITE("Vectors page", vectors_page);
> > +
> > +struct test *arch_tests[] = {
> > +#ifdef HAVE_DWARF_UNWIND_SUPPORT
> > + &dwarf_unwind,
> > +#endif
> > + &vectors_pages,
> > + NULL,
> > };
>
> SNIP
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [RFC PATCH 3/5] perf test: Make each test/suite its own struct.
2021-09-27 16:08 ` Ian Rogers
@ 2021-09-28 20:07 ` Jiri Olsa
0 siblings, 0 replies; 16+ messages in thread
From: Jiri Olsa @ 2021-09-28 20:07 UTC (permalink / raw)
To: Ian Rogers
Cc: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Mark Rutland, Alexander Shishkin, Namhyung Kim, Jin Yao,
John Garry, Paul A . Clarke, linux-perf-users, linux-kernel,
Brendan Higgins, Daniel Latypov, David Gow, eranian
On Mon, Sep 27, 2021 at 09:08:53AM -0700, Ian Rogers wrote:
> On Sun, Sep 26, 2021 at 2:12 PM Jiri Olsa <jolsa@redhat.com> wrote:
> >
> > On Wed, Sep 22, 2021 at 01:19:56AM -0700, Ian Rogers wrote:
> > > By switching to an array of pointers to tests (later to be suites)
> > > the definition of the tests can be moved to the file containing the
> > > tests.
> > >
> > > Signed-off-by: Ian Rogers <irogers@google.com>
> > > ---
> > > tools/perf/arch/arm/include/arch-tests.h | 2 +-
> > > tools/perf/arch/arm/tests/arch-tests.c | 21 +-
> > > tools/perf/arch/arm64/include/arch-tests.h | 2 +-
> > > tools/perf/arch/arm64/tests/arch-tests.c | 15 +-
> > > tools/perf/arch/powerpc/include/arch-tests.h | 2 +-
> > > tools/perf/arch/powerpc/tests/arch-tests.c | 15 +-
> > > tools/perf/arch/x86/include/arch-tests.h | 2 +-
> > > tools/perf/arch/x86/tests/arch-tests.c | 47 ++--
> > > tools/perf/tests/builtin-test.c | 273 ++++++++++++-------
> > > tools/perf/tests/tests.h | 6 +
> > > 10 files changed, 220 insertions(+), 165 deletions(-)
> > >
> > > diff --git a/tools/perf/arch/arm/include/arch-tests.h b/tools/perf/arch/arm/include/arch-tests.h
> > > index c62538052404..37039e80f18b 100644
> > > --- a/tools/perf/arch/arm/include/arch-tests.h
> > > +++ b/tools/perf/arch/arm/include/arch-tests.h
> > > @@ -2,6 +2,6 @@
> > > #ifndef ARCH_TESTS_H
> > > #define ARCH_TESTS_H
> > >
> > > -extern struct test arch_tests[];
> > > +extern struct test *arch_tests[];
> > >
> > > #endif
> > > diff --git a/tools/perf/arch/arm/tests/arch-tests.c b/tools/perf/arch/arm/tests/arch-tests.c
> > > index 6848101a855f..4374b0293177 100644
> > > --- a/tools/perf/arch/arm/tests/arch-tests.c
> > > +++ b/tools/perf/arch/arm/tests/arch-tests.c
> > > @@ -3,18 +3,15 @@
> > > #include "tests/tests.h"
> > > #include "arch-tests.h"
> > >
> > > -struct test arch_tests[] = {
> > > #ifdef HAVE_DWARF_UNWIND_SUPPORT
> > > - {
> > > - .desc = "DWARF unwind",
> > > - .func = test__dwarf_unwind,
> > > - },
> > > +DEFINE_SUITE("DWARF unwind", dwarf_unwind);
> >
> > why not having this and other in here DEFINE_SUITE in
> > tests/dwarf-unwind.c ? it seems to get compiled in only
> > for supported arch
>
> Not sure I follow. In these changes I've just tried to move things
> around without changing the logic behind things. This sounds like a
> sensible follow up clean up.
ah ok, maybe I mixed the proper patch to adress this, sry
the question I have is why DEFINE_SUITE("DWARF unwind" ..
is not moved to dwarf unwind test object, like you did for
other tests
thanks,
jirka
>
> Thanks,
> Ian
>
> > jirka
> >
> > > #endif
> > > - {
> > > - .desc = "Vectors page",
> > > - .func = test__vectors_page,
> > > - },
> > > - {
> > > - .func = NULL,
> > > - },
> > > +DEFINE_SUITE("Vectors page", vectors_page);
> > > +
> > > +struct test *arch_tests[] = {
> > > +#ifdef HAVE_DWARF_UNWIND_SUPPORT
> > > + &dwarf_unwind,
> > > +#endif
> > > + &vectors_pages,
> > > + NULL,
> > > };
> >
> > SNIP
> >
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* [RFC PATCH 4/5] perf test: Move each test suite struct to its test
2021-09-22 8:19 [RFC PATCH 0/5] Start aligning perf test with kunit style Ian Rogers
` (2 preceding siblings ...)
2021-09-22 8:19 ` [RFC PATCH 3/5] perf test: Make each test/suite its own struct Ian Rogers
@ 2021-09-22 8:19 ` Ian Rogers
2021-09-22 8:19 ` [RFC PATCH 5/5] perf test: Rename struct test to test_suite Ian Rogers
2021-09-22 21:55 ` [RFC PATCH 0/5] Start aligning perf test with kunit style Jiri Olsa
5 siblings, 0 replies; 16+ messages in thread
From: Ian Rogers @ 2021-09-22 8:19 UTC (permalink / raw)
To: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Mark Rutland, Alexander Shishkin, Jiri Olsa, Namhyung Kim,
Jin Yao, John Garry, Paul A . Clarke, linux-perf-users,
linux-kernel, Brendan Higgins, Daniel Latypov, David Gow
Cc: eranian, Ian Rogers
Rather than export test functions, export the test struct. Rename with a
suite__ prefix to avoid name collisions.
Signed-off-by: Ian Rogers <irogers@google.com>
---
tools/perf/arch/arm/tests/arch-tests.c | 4 +-
tools/perf/arch/arm64/tests/arch-tests.c | 2 +-
tools/perf/arch/powerpc/tests/arch-tests.c | 2 +-
tools/perf/arch/x86/tests/arch-tests.c | 12 +-
tools/perf/tests/api-io.c | 6 +-
tools/perf/tests/attr.c | 4 +-
tools/perf/tests/backward-ring-buffer.c | 4 +-
tools/perf/tests/bitmap.c | 4 +-
tools/perf/tests/bp_account.c | 10 +-
tools/perf/tests/bp_signal.c | 8 +-
tools/perf/tests/bp_signal_overflow.c | 8 +-
tools/perf/tests/bpf.c | 22 +-
tools/perf/tests/builtin-test.c | 285 +++++---------------
tools/perf/tests/clang.c | 18 +-
tools/perf/tests/code-reading.c | 4 +-
tools/perf/tests/cpumap.c | 10 +-
tools/perf/tests/demangle-java-test.c | 4 +-
tools/perf/tests/demangle-ocaml-test.c | 4 +-
tools/perf/tests/dlfilter-test.c | 4 +-
tools/perf/tests/dso-data.c | 10 +-
tools/perf/tests/event-times.c | 4 +-
tools/perf/tests/event_update.c | 4 +-
tools/perf/tests/evsel-roundtrip-name.c | 4 +-
tools/perf/tests/evsel-tp-sched.c | 4 +-
tools/perf/tests/expand-cgroup.c | 6 +-
tools/perf/tests/expr.c | 4 +-
tools/perf/tests/fdarray.c | 7 +-
tools/perf/tests/genelf.c | 6 +-
tools/perf/tests/hists_cumulate.c | 4 +-
tools/perf/tests/hists_filter.c | 4 +-
tools/perf/tests/hists_link.c | 4 +-
tools/perf/tests/hists_output.c | 4 +-
tools/perf/tests/is_printable_array.c | 4 +-
tools/perf/tests/keep-tracking.c | 4 +-
tools/perf/tests/kmod-path.c | 4 +-
tools/perf/tests/llvm.c | 22 +-
tools/perf/tests/maps.c | 4 +-
tools/perf/tests/mem.c | 4 +-
tools/perf/tests/mem2node.c | 4 +-
tools/perf/tests/mmap-basic.c | 4 +-
tools/perf/tests/mmap-thread-lookup.c | 4 +-
tools/perf/tests/openat-syscall-all-cpus.c | 5 +-
tools/perf/tests/openat-syscall-tp-fields.c | 4 +-
tools/perf/tests/openat-syscall.c | 5 +-
tools/perf/tests/parse-events.c | 4 +-
tools/perf/tests/parse-metric.c | 4 +-
tools/perf/tests/parse-no-sample-id-all.c | 4 +-
tools/perf/tests/pe-file-parsing.c | 6 +-
tools/perf/tests/perf-hooks.c | 4 +-
tools/perf/tests/perf-record.c | 4 +-
tools/perf/tests/perf-time-to-tsc.c | 10 +-
tools/perf/tests/pfm.c | 16 +-
tools/perf/tests/pmu-events.c | 19 +-
tools/perf/tests/pmu.c | 4 +-
tools/perf/tests/python-use.c | 4 +-
tools/perf/tests/sample-parsing.c | 4 +-
tools/perf/tests/sdt.c | 6 +-
tools/perf/tests/stat.c | 10 +-
tools/perf/tests/sw-clock.c | 4 +-
tools/perf/tests/switch-tracking.c | 4 +-
tools/perf/tests/task-exit.c | 4 +-
tools/perf/tests/tests.h | 22 +-
tools/perf/tests/thread-map.c | 10 +-
tools/perf/tests/thread-maps-share.c | 4 +-
tools/perf/tests/time-utils-test.c | 4 +-
tools/perf/tests/topology.c | 4 +-
tools/perf/tests/unit_number__scnprintf.c | 4 +-
tools/perf/tests/vmlinux-kallsyms.c | 5 +-
tools/perf/tests/wp.c | 22 +-
69 files changed, 391 insertions(+), 343 deletions(-)
diff --git a/tools/perf/arch/arm/tests/arch-tests.c b/tools/perf/arch/arm/tests/arch-tests.c
index 4374b0293177..83eb53f2f1d4 100644
--- a/tools/perf/arch/arm/tests/arch-tests.c
+++ b/tools/perf/arch/arm/tests/arch-tests.c
@@ -10,8 +10,8 @@ DEFINE_SUITE("Vectors page", vectors_page);
struct test *arch_tests[] = {
#ifdef HAVE_DWARF_UNWIND_SUPPORT
- &dwarf_unwind,
+ &suite__dwarf_unwind,
#endif
- &vectors_pages,
+ &suite__vectors_pages,
NULL,
};
diff --git a/tools/perf/arch/arm64/tests/arch-tests.c b/tools/perf/arch/arm64/tests/arch-tests.c
index 8d32a62dcc55..284fd089e24c 100644
--- a/tools/perf/arch/arm64/tests/arch-tests.c
+++ b/tools/perf/arch/arm64/tests/arch-tests.c
@@ -9,7 +9,7 @@ DEFINE_SUITE("DWARF unwind", dwarf_unwind);
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 8d32a62dcc55..284fd089e24c 100644
--- a/tools/perf/arch/powerpc/tests/arch-tests.c
+++ b/tools/perf/arch/powerpc/tests/arch-tests.c
@@ -9,7 +9,7 @@ DEFINE_SUITE("DWARF unwind", dwarf_unwind);
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 c5444a4f76b9..ad7eb33feacd 100644
--- a/tools/perf/arch/x86/tests/arch-tests.c
+++ b/tools/perf/arch/x86/tests/arch-tests.c
@@ -17,16 +17,16 @@ 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,
};
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 b4b9a9488d51..180e16917658 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];
@@ -166,3 +166,5 @@ int test__backward_ring_buffer(struct test *test __maybe_unused, int subtest __m
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 fa03ff0dc083..74496a0fc973 100644
--- a/tools/perf/tests/bpf.c
+++ b/tools/perf/tests/bpf.c
@@ -282,12 +282,12 @@ static int __test__bpf(int idx)
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;
@@ -324,7 +324,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;
@@ -344,19 +344,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,
+ &suite__hists_link,
+ &suite__python_use,
+ &suite__bp_signal,
+ &suite__bp_signal_overflow,
+ &suite__bp_accounting,
+ &suite__wp,
+ &suite__task_exit,
+ &suite__sw_clock_freq,
+ &suite__code_reading,
+ &suite__sample_parsing,
+ &suite__keep_tracking,
+ &suite__parse_no_sample_id_all,
+ &suite__hists_filter,
+ &suite__mmap_thread_lookup,
+ &suite__thread_maps_share,
+ &suite__hists_output,
+ &suite__hists_cumulate,
+ &suite__switch_tracking,
+ &suite__fdarray__filter,
+ &suite__fdarray__add,
+ &suite__kmod_path__parse,
+ &suite__thread_map,
+ &suite__llvm,
+ &suite__session_topology,
+ &suite__bpf,
+ &suite__thread_map_synthesize,
+ &suite__thread_map_remove,
+ &suite__cpu_map_synthesize,
+ &suite__synthesize_stat_config,
+ &suite__synthesize_stat,
+ &suite__synthesize_stat_round,
+ &suite__event_update,
+ &suite__event_times,
+ &suite__backward_ring_buffer,
+ &suite__cpu_map_print,
+ &suite__cpu_map_merge,
+ &suite__sdt_event,
+ &suite__is_printable_array,
+ &suite__bitmap_print,
+ &suite__perf_hooks,
+ &suite__clang,
+ &suite__unit_number__scnprint,
+ &suite__mem2node,
+ &suite__time_utils,
+ &suite__jit_write_elf,
+ &suite__pfm,
+ &suite__api_io,
+ &suite__maps__merge_in,
+ &suite__demangle_java,
+ &suite__demangle_ocaml,
+ &suite__parse_metric,
+ &suite__pe_file_parsing,
+ &suite__expand_cgroup_events,
+ &suite__perf_time_to_tsc,
+ &suite__dlfilter,
NULL,
};
diff --git a/tools/perf/tests/clang.c b/tools/perf/tests/clang.c
index 2577d3ed1531..5052be1b5b20 100644
--- a/tools/perf/tests/clang.c
+++ b/tools/perf/tests/clang.c
@@ -19,12 +19,12 @@ static struct {
#endif
};
-int test__clang_subtest_get_nr(void)
+static int test__clang_subtest_get_nr(void)
{
return (int)ARRAY_SIZE(clang_testcase_table);
}
-const char *test__clang_subtest_get_desc(int i)
+static const char *test__clang_subtest_get_desc(int i)
{
if (i < 0 || i >= (int)ARRAY_SIZE(clang_testcase_table))
return NULL;
@@ -32,15 +32,25 @@ const char *test__clang_subtest_get_desc(int i)
}
#ifndef HAVE_LIBCLANGLLVM_SUPPORT
-int test__clang(struct test *test __maybe_unused, int i __maybe_unused)
+static int test__clang(struct test *test __maybe_unused, int i __maybe_unused)
{
return TEST_SKIP;
}
#else
-int test__clang(struct test *test __maybe_unused, int i)
+static int test__clang(struct test *test __maybe_unused, int i)
{
if (i < 0 || i >= (int)ARRAY_SIZE(clang_testcase_table))
return TEST_FAIL;
return clang_testcase_table[i].func();
}
#endif
+
+struct test suite__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,
+ }
+};
diff --git a/tools/perf/tests/code-reading.c b/tools/perf/tests/code-reading.c
index 9866cddebf23..0c7c87438100 100644
--- a/tools/perf/tests/code-reading.c
+++ b/tools/perf/tests/code-reading.c
@@ -715,7 +715,7 @@ static int do_test_code_reading(bool try_kcore)
return err;
}
-int test__code_reading(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__code_reading(struct test *test __maybe_unused, int subtest __maybe_unused)
{
int ret;
@@ -742,3 +742,5 @@ int test__code_reading(struct test *test __maybe_unused, int subtest __maybe_unu
return -1;
};
}
+
+DEFINE_SUITE("Object code reading", code_reading);
diff --git a/tools/perf/tests/cpumap.c b/tools/perf/tests/cpumap.c
index 0472b110fe65..6f2525fb9fd7 100644
--- a/tools/perf/tests/cpumap.c
+++ b/tools/perf/tests/cpumap.c
@@ -75,7 +75,7 @@ static int process_event_cpus(struct perf_tool *tool __maybe_unused,
}
-int test__cpu_map_synthesize(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__cpu_map_synthesize(struct test *test __maybe_unused, int subtest __maybe_unused)
{
struct perf_cpu_map *cpus;
@@ -111,7 +111,7 @@ static int cpu_map_print(const char *str)
return !strcmp(buf, str);
}
-int test__cpu_map_print(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__cpu_map_print(struct test *test __maybe_unused, int subtest __maybe_unused)
{
TEST_ASSERT_VAL("failed to convert map", cpu_map_print("1"));
TEST_ASSERT_VAL("failed to convert map", cpu_map_print("1,5"));
@@ -123,7 +123,7 @@ int test__cpu_map_print(struct test *test __maybe_unused, int subtest __maybe_un
return 0;
}
-int test__cpu_map_merge(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__cpu_map_merge(struct test *test __maybe_unused, int subtest __maybe_unused)
{
struct perf_cpu_map *a = perf_cpu_map__new("4,2,1");
struct perf_cpu_map *b = perf_cpu_map__new("4,5,7");
@@ -137,3 +137,7 @@ int test__cpu_map_merge(struct test *test __maybe_unused, int subtest __maybe_un
perf_cpu_map__put(c);
return 0;
}
+
+DEFINE_SUITE("Synthesize cpu map", cpu_map_synthesize);
+DEFINE_SUITE("Print cpu map", cpu_map_print);
+DEFINE_SUITE("Merge cpu map", cpu_map_merge);
diff --git a/tools/perf/tests/demangle-java-test.c b/tools/perf/tests/demangle-java-test.c
index 8f3b90832fb0..37f488e5c36d 100644
--- a/tools/perf/tests/demangle-java-test.c
+++ b/tools/perf/tests/demangle-java-test.c
@@ -7,7 +7,7 @@
#include "debug.h"
#include "demangle-java.h"
-int test__demangle_java(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__demangle_java(struct test *test __maybe_unused, int subtest __maybe_unused)
{
int ret = TEST_OK;
char *buf = NULL;
@@ -40,3 +40,5 @@ int test__demangle_java(struct test *test __maybe_unused, int subtest __maybe_un
return ret;
}
+
+DEFINE_SUITE("Demangle Java", demangle_java);
diff --git a/tools/perf/tests/demangle-ocaml-test.c b/tools/perf/tests/demangle-ocaml-test.c
index 0043be812355..ee982cca7bbf 100644
--- a/tools/perf/tests/demangle-ocaml-test.c
+++ b/tools/perf/tests/demangle-ocaml-test.c
@@ -7,7 +7,7 @@
#include "debug.h"
#include "demangle-ocaml.h"
-int test__demangle_ocaml(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__demangle_ocaml(struct test *test __maybe_unused, int subtest __maybe_unused)
{
int ret = TEST_OK;
char *buf = NULL;
@@ -41,3 +41,5 @@ int test__demangle_ocaml(struct test *test __maybe_unused, int subtest __maybe_u
return ret;
}
+
+DEFINE_SUITE("Demangle OCaml", demangle_ocaml);
diff --git a/tools/perf/tests/dlfilter-test.c b/tools/perf/tests/dlfilter-test.c
index bc03b5df6828..378f5afc6032 100644
--- a/tools/perf/tests/dlfilter-test.c
+++ b/tools/perf/tests/dlfilter-test.c
@@ -398,7 +398,7 @@ static void test_data__free(struct test_data *td)
}
}
-int test__dlfilter(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__dlfilter(struct test *test __maybe_unused, int subtest __maybe_unused)
{
struct test_data td = {.fd = -1};
int pid = getpid();
@@ -414,3 +414,5 @@ int test__dlfilter(struct test *test __maybe_unused, int subtest __maybe_unused)
test_data__free(&td);
return err;
}
+
+DEFINE_SUITE("dlfilter C API", dlfilter);
diff --git a/tools/perf/tests/dso-data.c b/tools/perf/tests/dso-data.c
index 43e1b01e5afc..d9e060a7c1f6 100644
--- a/tools/perf/tests/dso-data.c
+++ b/tools/perf/tests/dso-data.c
@@ -113,7 +113,7 @@ static int dso__data_fd(struct dso *dso, struct machine *machine)
return fd;
}
-int test__dso_data(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__dso_data(struct test *test __maybe_unused, int subtest __maybe_unused)
{
struct machine machine;
struct dso *dso;
@@ -248,7 +248,7 @@ static int set_fd_limit(int n)
return setrlimit(RLIMIT_NOFILE, &rlim);
}
-int test__dso_data_cache(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__dso_data_cache(struct test *test __maybe_unused, int subtest __maybe_unused)
{
struct machine machine;
long nr_end, nr = open_files_cnt();
@@ -318,7 +318,7 @@ static long new_limit(int count)
return ret;
}
-int test__dso_data_reopen(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__dso_data_reopen(struct test *test __maybe_unused, int subtest __maybe_unused)
{
struct machine machine;
long nr_end, nr = open_files_cnt(), lim = new_limit(3);
@@ -393,3 +393,7 @@ int test__dso_data_reopen(struct test *test __maybe_unused, int subtest __maybe_
TEST_ASSERT_VAL("failed leaking files", nr == nr_end);
return 0;
}
+
+DEFINE_SUITE("DSO data read", dso_data);
+DEFINE_SUITE("DSO data cache", dso_data_cache);
+DEFINE_SUITE("DSO data reopen", dso_data_reopen);
diff --git a/tools/perf/tests/event-times.c b/tools/perf/tests/event-times.c
index 04ce4401f775..2ce8945931e7 100644
--- a/tools/perf/tests/event-times.c
+++ b/tools/perf/tests/event-times.c
@@ -216,7 +216,7 @@ static int test_times(int (attach)(struct evlist *),
* and checks that enabled and running times
* match.
*/
-int test__event_times(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__event_times(struct test *test __maybe_unused, int subtest __maybe_unused)
{
int err, ret = 0;
@@ -239,3 +239,5 @@ int test__event_times(struct test *test __maybe_unused, int subtest __maybe_unus
#undef _T
return ret;
}
+
+DEFINE_SUITE("Event times", event_times);
diff --git a/tools/perf/tests/event_update.c b/tools/perf/tests/event_update.c
index 44a50527f9d9..9dfb665f8ac9 100644
--- a/tools/perf/tests/event_update.c
+++ b/tools/perf/tests/event_update.c
@@ -83,7 +83,7 @@ static int process_event_cpus(struct perf_tool *tool __maybe_unused,
return 0;
}
-int test__event_update(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__event_update(struct test *test __maybe_unused, int subtest __maybe_unused)
{
struct evsel *evsel;
struct event_name tmp;
@@ -123,3 +123,5 @@ int test__event_update(struct test *test __maybe_unused, int subtest __maybe_unu
evlist__delete(evlist);
return 0;
}
+
+DEFINE_SUITE("Synthesize attr update", event_update);
diff --git a/tools/perf/tests/evsel-roundtrip-name.c b/tools/perf/tests/evsel-roundtrip-name.c
index 4e09f0a312af..4338285d1ad5 100644
--- a/tools/perf/tests/evsel-roundtrip-name.c
+++ b/tools/perf/tests/evsel-roundtrip-name.c
@@ -99,7 +99,7 @@ static int __perf_evsel__name_array_test(const char *names[], int nr_names,
#define perf_evsel__name_array_test(names, distance) \
__perf_evsel__name_array_test(names, ARRAY_SIZE(names), distance)
-int test__perf_evsel__roundtrip_name_test(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__perf_evsel__roundtrip_name_test(struct test *test __maybe_unused, int subtest __maybe_unused)
{
int err = 0, ret = 0;
@@ -120,3 +120,5 @@ int test__perf_evsel__roundtrip_name_test(struct test *test __maybe_unused, int
return ret;
}
+
+DEFINE_SUITE("Roundtrip evsel->name", perf_evsel__roundtrip_name_test);
diff --git a/tools/perf/tests/evsel-tp-sched.c b/tools/perf/tests/evsel-tp-sched.c
index f9e34bd26cf3..1603841fcb98 100644
--- a/tools/perf/tests/evsel-tp-sched.c
+++ b/tools/perf/tests/evsel-tp-sched.c
@@ -32,7 +32,7 @@ static int evsel__test_field(struct evsel *evsel, const char *name, int size, bo
return ret;
}
-int test__perf_evsel__tp_sched_test(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__perf_evsel__tp_sched_test(struct test *test __maybe_unused, int subtest __maybe_unused)
{
struct evsel *evsel = evsel__newtp("sched", "sched_switch");
int ret = 0;
@@ -87,3 +87,5 @@ int test__perf_evsel__tp_sched_test(struct test *test __maybe_unused, int subtes
evsel__delete(evsel);
return ret;
}
+
+DEFINE_SUITE("Parse sched tracepoints fields", perf_evsel__tp_sched_test);
diff --git a/tools/perf/tests/expand-cgroup.c b/tools/perf/tests/expand-cgroup.c
index 0e46aeb843ce..577bc6c324b5 100644
--- a/tools/perf/tests/expand-cgroup.c
+++ b/tools/perf/tests/expand-cgroup.c
@@ -219,8 +219,8 @@ static int expand_metric_events(void)
return ret;
}
-int test__expand_cgroup_events(struct test *test __maybe_unused,
- int subtest __maybe_unused)
+static int test__expand_cgroup_events(struct test *test __maybe_unused,
+ int subtest __maybe_unused)
{
int ret;
@@ -238,3 +238,5 @@ int test__expand_cgroup_events(struct test *test __maybe_unused,
return ret;
}
+
+DEFINE_SUITE("Event expansion for cgroups", expand_cgroup_events);
diff --git a/tools/perf/tests/expr.c b/tools/perf/tests/expr.c
index 4d01051951cd..9e1d1461e34f 100644
--- a/tools/perf/tests/expr.c
+++ b/tools/perf/tests/expr.c
@@ -16,7 +16,7 @@ static int test(struct expr_parse_ctx *ctx, const char *e, double val2)
return 0;
}
-int test__expr(struct test *t __maybe_unused, int subtest __maybe_unused)
+static int test__expr(struct test *t __maybe_unused, int subtest __maybe_unused)
{
struct expr_id_data *val_ptr;
const char *p;
@@ -86,3 +86,5 @@ int test__expr(struct test *t __maybe_unused, int subtest __maybe_unused)
return 0;
}
+
+DEFINE_SUITE("Simple expression parser", expr);
diff --git a/tools/perf/tests/fdarray.c b/tools/perf/tests/fdarray.c
index d9eca8e86a6b..7b2f6c2ad705 100644
--- a/tools/perf/tests/fdarray.c
+++ b/tools/perf/tests/fdarray.c
@@ -28,7 +28,7 @@ static int fdarray__fprintf_prefix(struct fdarray *fda, const char *prefix, FILE
return printed + fdarray__fprintf(fda, fp);
}
-int test__fdarray__filter(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__fdarray__filter(struct test *test __maybe_unused, int subtest __maybe_unused)
{
int nr_fds, err = TEST_FAIL;
struct fdarray *fda = fdarray__new(5, 5);
@@ -89,7 +89,7 @@ int test__fdarray__filter(struct test *test __maybe_unused, int subtest __maybe_
return err;
}
-int test__fdarray__add(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__fdarray__add(struct test *test __maybe_unused, int subtest __maybe_unused)
{
int err = TEST_FAIL;
struct fdarray *fda = fdarray__new(2, 2);
@@ -158,3 +158,6 @@ int test__fdarray__add(struct test *test __maybe_unused, int subtest __maybe_unu
out:
return err;
}
+
+DEFINE_SUITE("Filter fds with revents mask in a fdarray", fdarray__filter);
+DEFINE_SUITE("Add fd to a fdarray, making it autogrow", fdarray__add);
diff --git a/tools/perf/tests/genelf.c b/tools/perf/tests/genelf.c
index f797f9823e89..3c5ced5d9588 100644
--- a/tools/perf/tests/genelf.c
+++ b/tools/perf/tests/genelf.c
@@ -16,8 +16,8 @@
#define TEMPL "/tmp/perf-test-XXXXXX"
-int test__jit_write_elf(struct test *test __maybe_unused,
- int subtest __maybe_unused)
+static int test__jit_write_elf(struct test *test __maybe_unused,
+ int subtest __maybe_unused)
{
#ifdef HAVE_JITDUMP
static unsigned char x86_code[] = {
@@ -49,3 +49,5 @@ int test__jit_write_elf(struct test *test __maybe_unused,
return TEST_SKIP;
#endif
}
+
+DEFINE_SUITE("Test jit_write_elf", jit_write_elf);
diff --git a/tools/perf/tests/hists_cumulate.c b/tools/perf/tests/hists_cumulate.c
index 890cb1f5bf53..f7a8d3d78389 100644
--- a/tools/perf/tests/hists_cumulate.c
+++ b/tools/perf/tests/hists_cumulate.c
@@ -689,7 +689,7 @@ static int test4(struct evsel *evsel, struct machine *machine)
return err;
}
-int test__hists_cumulate(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__hists_cumulate(struct test *test __maybe_unused, int subtest __maybe_unused)
{
int err = TEST_FAIL;
struct machines machines;
@@ -736,3 +736,5 @@ int test__hists_cumulate(struct test *test __maybe_unused, int subtest __maybe_u
return err;
}
+
+DEFINE_SUITE("Cumulate child hist entries", hists_cumulate);
diff --git a/tools/perf/tests/hists_filter.c b/tools/perf/tests/hists_filter.c
index ca6120cd1d90..09e140191e5f 100644
--- a/tools/perf/tests/hists_filter.c
+++ b/tools/perf/tests/hists_filter.c
@@ -101,7 +101,7 @@ static int add_hist_entries(struct evlist *evlist,
return TEST_FAIL;
}
-int test__hists_filter(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__hists_filter(struct test *test __maybe_unused, int subtest __maybe_unused)
{
int err = TEST_FAIL;
struct machines machines;
@@ -325,3 +325,5 @@ int test__hists_filter(struct test *test __maybe_unused, int subtest __maybe_unu
return err;
}
+
+DEFINE_SUITE("Filter hist entries", hists_filter);
diff --git a/tools/perf/tests/hists_link.c b/tools/perf/tests/hists_link.c
index a024d3f3a412..08571f788884 100644
--- a/tools/perf/tests/hists_link.c
+++ b/tools/perf/tests/hists_link.c
@@ -264,7 +264,7 @@ static int validate_link(struct hists *leader, struct hists *other)
return __validate_link(leader, 0) || __validate_link(other, 1);
}
-int test__hists_link(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__hists_link(struct test *test __maybe_unused, int subtest __maybe_unused)
{
int err = -1;
struct hists *hists, *first_hists;
@@ -339,3 +339,5 @@ int test__hists_link(struct test *test __maybe_unused, int subtest __maybe_unuse
return err;
}
+
+DEFINE_SUITE("Match and link multiple hists", hists_link);
diff --git a/tools/perf/tests/hists_output.c b/tools/perf/tests/hists_output.c
index 8973f35df604..b427df8ee94a 100644
--- a/tools/perf/tests/hists_output.c
+++ b/tools/perf/tests/hists_output.c
@@ -575,7 +575,7 @@ static int test5(struct evsel *evsel, struct machine *machine)
return err;
}
-int test__hists_output(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__hists_output(struct test *test __maybe_unused, int subtest __maybe_unused)
{
int err = TEST_FAIL;
struct machines machines;
@@ -623,3 +623,5 @@ int test__hists_output(struct test *test __maybe_unused, int subtest __maybe_unu
return err;
}
+
+DEFINE_SUITE("Sort output of hist entries", hists_output);
diff --git a/tools/perf/tests/is_printable_array.c b/tools/perf/tests/is_printable_array.c
index 9c7b3baca4fe..8891b10fac5c 100644
--- a/tools/perf/tests/is_printable_array.c
+++ b/tools/perf/tests/is_printable_array.c
@@ -5,7 +5,7 @@
#include "debug.h"
#include "print_binary.h"
-int test__is_printable_array(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__is_printable_array(struct test *test __maybe_unused, int subtest __maybe_unused)
{
char buf1[] = { 'k', 'r', 4, 'v', 'a', 0 };
char buf2[] = { 'k', 'r', 'a', 'v', 4, 0 };
@@ -36,3 +36,5 @@ int test__is_printable_array(struct test *test __maybe_unused, int subtest __may
return TEST_OK;
}
+
+DEFINE_SUITE("is_printable_array", is_printable_array);
diff --git a/tools/perf/tests/keep-tracking.c b/tools/perf/tests/keep-tracking.c
index a0438b0f0805..e723c976dc81 100644
--- a/tools/perf/tests/keep-tracking.c
+++ b/tools/perf/tests/keep-tracking.c
@@ -61,7 +61,7 @@ static int find_comm(struct evlist *evlist, const char *comm)
* when an event is disabled but a dummy software event is not disabled. If the
* test passes %0 is returned, otherwise %-1 is returned.
*/
-int test__keep_tracking(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__keep_tracking(struct test *test __maybe_unused, int subtest __maybe_unused)
{
struct record_opts opts = {
.mmap_pages = UINT_MAX,
@@ -160,3 +160,5 @@ int test__keep_tracking(struct test *test __maybe_unused, int subtest __maybe_un
return err;
}
+
+DEFINE_SUITE("Use a dummy software event to keep tracking", keep_tracking);
diff --git a/tools/perf/tests/kmod-path.c b/tools/perf/tests/kmod-path.c
index e483210b176b..4935dd3182ed 100644
--- a/tools/perf/tests/kmod-path.c
+++ b/tools/perf/tests/kmod-path.c
@@ -47,7 +47,7 @@ static int test_is_kernel_module(const char *path, int cpumode, bool expect)
#define M(path, c, e) \
TEST_ASSERT_VAL("failed", !test_is_kernel_module(path, c, e))
-int test__kmod_path__parse(struct test *t __maybe_unused, int subtest __maybe_unused)
+static int test__kmod_path__parse(struct test *t __maybe_unused, int subtest __maybe_unused)
{
/* path alloc_name kmod comp name */
T("/xxxx/xxxx/x-x.ko", true , true, 0 , "[x_x]");
@@ -159,3 +159,5 @@ int test__kmod_path__parse(struct test *t __maybe_unused, int subtest __maybe_un
return 0;
}
+
+DEFINE_SUITE("kmod_path__parse", kmod_path__parse);
diff --git a/tools/perf/tests/llvm.c b/tools/perf/tests/llvm.c
index 33e43cce9064..b605a71ad8d5 100644
--- a/tools/perf/tests/llvm.c
+++ b/tools/perf/tests/llvm.c
@@ -124,7 +124,7 @@ test_llvm__fetch_bpf_obj(void **p_obj_buf,
return ret;
}
-int test__llvm(struct test *test __maybe_unused, int subtest)
+static int test__llvm(struct test *test __maybe_unused, int subtest)
{
int ret;
void *obj_buf = NULL;
@@ -149,12 +149,12 @@ int test__llvm(struct test *test __maybe_unused, int subtest)
return ret;
}
-int test__llvm_subtest_get_nr(void)
+static int test__llvm_subtest_get_nr(void)
{
return __LLVM_TESTCASE_MAX;
}
-const char *test__llvm_subtest_get_desc(int subtest)
+static const char *test__llvm_subtest_get_desc(int subtest)
{
if ((subtest < 0) || (subtest >= __LLVM_TESTCASE_MAX))
return NULL;
@@ -162,18 +162,28 @@ const char *test__llvm_subtest_get_desc(int subtest)
return bpf_source_table[subtest].desc;
}
#else //HAVE_LIBBPF_SUPPORT
-int test__llvm(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__llvm(struct test *test __maybe_unused, int subtest __maybe_unused)
{
return TEST_SKIP;
}
-int test__llvm_subtest_get_nr(void)
+static int test__llvm_subtest_get_nr(void)
{
return 0;
}
-const char *test__llvm_subtest_get_desc(int subtest __maybe_unused)
+static const char *test__llvm_subtest_get_desc(int subtest __maybe_unused)
{
return NULL;
}
#endif // HAVE_LIBBPF_SUPPORT
+
+struct test suite__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,
+ },
+};
diff --git a/tools/perf/tests/maps.c b/tools/perf/tests/maps.c
index 1ac72919fa35..4a2e6f312015 100644
--- a/tools/perf/tests/maps.c
+++ b/tools/perf/tests/maps.c
@@ -33,7 +33,7 @@ static int check_maps(struct map_def *merged, unsigned int size, struct maps *ma
return TEST_OK;
}
-int test__maps__merge_in(struct test *t __maybe_unused, int subtest __maybe_unused)
+static int test__maps__merge_in(struct test *t __maybe_unused, int subtest __maybe_unused)
{
struct maps maps;
unsigned int i;
@@ -120,3 +120,5 @@ int test__maps__merge_in(struct test *t __maybe_unused, int subtest __maybe_unus
maps__exit(&maps);
return TEST_OK;
}
+
+DEFINE_SUITE("maps__merge_in", maps__merge_in);
diff --git a/tools/perf/tests/mem.c b/tools/perf/tests/mem.c
index 673a11a6cd1b..3af082508653 100644
--- a/tools/perf/tests/mem.c
+++ b/tools/perf/tests/mem.c
@@ -23,7 +23,7 @@ static int check(union perf_mem_data_src data_src,
return 0;
}
-int test__mem(struct test *text __maybe_unused, int subtest __maybe_unused)
+static int test__mem(struct test *text __maybe_unused, int subtest __maybe_unused)
{
int ret = 0;
union perf_mem_data_src src;
@@ -56,3 +56,5 @@ int test__mem(struct test *text __maybe_unused, int subtest __maybe_unused)
return ret;
}
+
+DEFINE_SUITE("Test data source output", mem);
diff --git a/tools/perf/tests/mem2node.c b/tools/perf/tests/mem2node.c
index e4d0d58b97f8..0a90e6084d81 100644
--- a/tools/perf/tests/mem2node.c
+++ b/tools/perf/tests/mem2node.c
@@ -43,7 +43,7 @@ static unsigned long *get_bitmap(const char *str, int nbits)
return bm && map ? bm : NULL;
}
-int test__mem2node(struct test *t __maybe_unused, int subtest __maybe_unused)
+static int test__mem2node(struct test *t __maybe_unused, int subtest __maybe_unused)
{
struct mem2node map;
struct memory_node nodes[3];
@@ -77,3 +77,5 @@ int test__mem2node(struct test *t __maybe_unused, int subtest __maybe_unused)
mem2node__exit(&map);
return 0;
}
+
+DEFINE_SUITE("mem2node", mem2node);
diff --git a/tools/perf/tests/mmap-basic.c b/tools/perf/tests/mmap-basic.c
index d38757db2dc2..86f34631312d 100644
--- a/tools/perf/tests/mmap-basic.c
+++ b/tools/perf/tests/mmap-basic.c
@@ -29,7 +29,7 @@
* Then it checks if the number of syscalls reported as perf events by
* the kernel corresponds to the number of syscalls made.
*/
-int test__basic_mmap(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__basic_mmap(struct test *test __maybe_unused, int subtest __maybe_unused)
{
int err = -1;
union perf_event *event;
@@ -164,3 +164,5 @@ int test__basic_mmap(struct test *test __maybe_unused, int subtest __maybe_unuse
perf_thread_map__put(threads);
return err;
}
+
+DEFINE_SUITE("Read samples using the mmap interface", basic_mmap);
diff --git a/tools/perf/tests/mmap-thread-lookup.c b/tools/perf/tests/mmap-thread-lookup.c
index 8d9d4cbff76d..3a6e7d71faff 100644
--- a/tools/perf/tests/mmap-thread-lookup.c
+++ b/tools/perf/tests/mmap-thread-lookup.c
@@ -224,7 +224,7 @@ static int mmap_events(synth_cb synth)
*
* by using all thread objects.
*/
-int test__mmap_thread_lookup(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__mmap_thread_lookup(struct test *test __maybe_unused, int subtest __maybe_unused)
{
/* perf_event__synthesize_threads synthesize */
TEST_ASSERT_VAL("failed with sythesizing all",
@@ -236,3 +236,5 @@ int test__mmap_thread_lookup(struct test *test __maybe_unused, int subtest __may
return 0;
}
+
+DEFINE_SUITE("Lookup mmap thread", mmap_thread_lookup);
diff --git a/tools/perf/tests/openat-syscall-all-cpus.c b/tools/perf/tests/openat-syscall-all-cpus.c
index f7dd6c463f04..28f3597ba531 100644
--- a/tools/perf/tests/openat-syscall-all-cpus.c
+++ b/tools/perf/tests/openat-syscall-all-cpus.c
@@ -19,7 +19,8 @@
#include "stat.h"
#include "util/counts.h"
-int test__openat_syscall_event_on_all_cpus(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__openat_syscall_event_on_all_cpus(struct test *test __maybe_unused,
+ int subtest __maybe_unused)
{
int err = -1, fd, cpu;
struct perf_cpu_map *cpus;
@@ -127,3 +128,5 @@ int test__openat_syscall_event_on_all_cpus(struct test *test __maybe_unused, int
perf_thread_map__put(threads);
return err;
}
+
+DEFINE_SUITE("Detect openat syscall event on all cpus", openat_syscall_event_on_all_cpus);
diff --git a/tools/perf/tests/openat-syscall-tp-fields.c b/tools/perf/tests/openat-syscall-tp-fields.c
index 5e4af2f0f14a..0f9c497f95d7 100644
--- a/tools/perf/tests/openat-syscall-tp-fields.c
+++ b/tools/perf/tests/openat-syscall-tp-fields.c
@@ -22,7 +22,7 @@
#define AT_FDCWD -100
#endif
-int test__syscall_openat_tp_fields(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__syscall_openat_tp_fields(struct test *test __maybe_unused, int subtest __maybe_unused)
{
struct record_opts opts = {
.target = {
@@ -142,3 +142,5 @@ int test__syscall_openat_tp_fields(struct test *test __maybe_unused, int subtest
out:
return err;
}
+
+DEFINE_SUITE("syscalls:sys_enter_openat event fields", syscall_openat_tp_fields);
diff --git a/tools/perf/tests/openat-syscall.c b/tools/perf/tests/openat-syscall.c
index 85a8f0fe7aea..8f904fcebe6f 100644
--- a/tools/perf/tests/openat-syscall.c
+++ b/tools/perf/tests/openat-syscall.c
@@ -13,7 +13,8 @@
#include "tests.h"
#include "util/counts.h"
-int test__openat_syscall_event(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__openat_syscall_event(struct test *test __maybe_unused,
+ int subtest __maybe_unused)
{
int err = -1, fd;
struct evsel *evsel;
@@ -66,3 +67,5 @@ int test__openat_syscall_event(struct test *test __maybe_unused, int subtest __m
perf_thread_map__put(threads);
return err;
}
+
+DEFINE_SUITE("Detect openat syscall event", openat_syscall_event);
diff --git a/tools/perf/tests/parse-events.c b/tools/perf/tests/parse-events.c
index fd3556cc9ad4..a0df5b4f45fd 100644
--- a/tools/perf/tests/parse-events.c
+++ b/tools/perf/tests/parse-events.c
@@ -2276,7 +2276,7 @@ static int test_pmu_events_alias(char *event, char *alias)
return test_event(&e);
}
-int test__parse_events(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__parse_events(struct test *test __maybe_unused, int subtest __maybe_unused)
{
int ret1, ret2 = 0;
char *event, *alias;
@@ -2319,3 +2319,5 @@ do { \
return ret2;
}
+
+DEFINE_SUITE("Parse event definition strings", parse_events);
diff --git a/tools/perf/tests/parse-metric.c b/tools/perf/tests/parse-metric.c
index 4f6f4904e852..86568cb937a9 100644
--- a/tools/perf/tests/parse-metric.c
+++ b/tools/perf/tests/parse-metric.c
@@ -369,7 +369,7 @@ static int test_metric_group(void)
return 0;
}
-int test__parse_metric(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__parse_metric(struct test *test __maybe_unused, int subtest __maybe_unused)
{
TEST_ASSERT_VAL("IPC failed", test_ipc() == 0);
TEST_ASSERT_VAL("frontend failed", test_frontend() == 0);
@@ -383,3 +383,5 @@ int test__parse_metric(struct test *test __maybe_unused, int subtest __maybe_unu
}
return 0;
}
+
+DEFINE_SUITE("Parse and process metrics", parse_metric);
diff --git a/tools/perf/tests/parse-no-sample-id-all.c b/tools/perf/tests/parse-no-sample-id-all.c
index 471273676701..38804fcc1a7e 100644
--- a/tools/perf/tests/parse-no-sample-id-all.c
+++ b/tools/perf/tests/parse-no-sample-id-all.c
@@ -67,7 +67,7 @@ struct test_attr_event {
*
* Return: %0 on success, %-1 if the test fails.
*/
-int test__parse_no_sample_id_all(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__parse_no_sample_id_all(struct test *test __maybe_unused, int subtest __maybe_unused)
{
int err;
@@ -103,3 +103,5 @@ int test__parse_no_sample_id_all(struct test *test __maybe_unused, int subtest _
return 0;
}
+
+DEFINE_SUITE("Parse with no sample_id_all bit set", parse_no_sample_id_all);
diff --git a/tools/perf/tests/pe-file-parsing.c b/tools/perf/tests/pe-file-parsing.c
index 58b90c42eb38..8d4fec99459a 100644
--- a/tools/perf/tests/pe-file-parsing.c
+++ b/tools/perf/tests/pe-file-parsing.c
@@ -68,7 +68,7 @@ static int run_dir(const char *d)
return TEST_OK;
}
-int test__pe_file_parsing(struct test *test __maybe_unused,
+static int test__pe_file_parsing(struct test *test __maybe_unused,
int subtest __maybe_unused)
{
struct stat st;
@@ -89,10 +89,12 @@ int test__pe_file_parsing(struct test *test __maybe_unused,
#else
-int test__pe_file_parsing(struct test *test __maybe_unused,
+static int test__pe_file_parsing(struct test *test __maybe_unused,
int subtest __maybe_unused)
{
return TEST_SKIP;
}
#endif
+
+DEFINE_SUITE("PE file support", pe_file_parsing);
diff --git a/tools/perf/tests/perf-hooks.c b/tools/perf/tests/perf-hooks.c
index dd865e0bea12..61cb1d0a6eb9 100644
--- a/tools/perf/tests/perf-hooks.c
+++ b/tools/perf/tests/perf-hooks.c
@@ -26,7 +26,7 @@ static void the_hook(void *_hook_flags)
raise(SIGSEGV);
}
-int test__perf_hooks(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__perf_hooks(struct test *test __maybe_unused, int subtest __maybe_unused)
{
int hook_flags = 0;
@@ -45,3 +45,5 @@ int test__perf_hooks(struct test *test __maybe_unused, int subtest __maybe_unuse
return TEST_FAIL;
return TEST_OK;
}
+
+DEFINE_SUITE("perf hooks", perf_hooks);
diff --git a/tools/perf/tests/perf-record.c b/tools/perf/tests/perf-record.c
index 0df471bf1590..24faa8487d8c 100644
--- a/tools/perf/tests/perf-record.c
+++ b/tools/perf/tests/perf-record.c
@@ -41,7 +41,7 @@ static int sched__get_first_possible_cpu(pid_t pid, cpu_set_t *maskp)
return cpu;
}
-int test__PERF_RECORD(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__PERF_RECORD(struct test *test __maybe_unused, int subtest __maybe_unused)
{
struct record_opts opts = {
.target = {
@@ -332,3 +332,5 @@ int test__PERF_RECORD(struct test *test __maybe_unused, int subtest __maybe_unus
out:
return (err < 0 || errs > 0) ? -1 : 0;
}
+
+DEFINE_SUITE("PERF_RECORD_* events & perf_sample fields", PERF_RECORD);
diff --git a/tools/perf/tests/perf-time-to-tsc.c b/tools/perf/tests/perf-time-to-tsc.c
index 7c56bc1f4cff..dc2dcad7371f 100644
--- a/tools/perf/tests/perf-time-to-tsc.c
+++ b/tools/perf/tests/perf-time-to-tsc.c
@@ -45,7 +45,7 @@
* %0 is returned, otherwise %-1 is returned. If TSC conversion is not
* supported then then the test passes but " (not supported)" is printed.
*/
-int test__perf_time_to_tsc(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__perf_time_to_tsc(struct test *test __maybe_unused, int subtest __maybe_unused)
{
struct record_opts opts = {
.mmap_pages = UINT_MAX,
@@ -185,7 +185,7 @@ int test__perf_time_to_tsc(struct test *test __maybe_unused, int subtest __maybe
return err;
}
-bool test__tsc_is_supported(void)
+static bool test__tsc_is_supported(void)
{
/*
* Except x86_64/i386 and Arm64, other archs don't support TSC in perf.
@@ -197,3 +197,9 @@ bool test__tsc_is_supported(void)
return false;
#endif
}
+
+struct test suite__perf_time_to_tsc = {
+ .desc = "Convert perf time to TSC",
+ .func = test__perf_time_to_tsc,
+ .is_supported = test__tsc_is_supported,
+};
diff --git a/tools/perf/tests/pfm.c b/tools/perf/tests/pfm.c
index e8fd0da0762b..83dc9742813a 100644
--- a/tools/perf/tests/pfm.c
+++ b/tools/perf/tests/pfm.c
@@ -189,19 +189,19 @@ static int test__pfm_group(void)
}
#endif
-const char *test__pfm_subtest_get_desc(int i)
+static const char *test__pfm_subtest_get_desc(int i)
{
if (i < 0 || i >= (int)ARRAY_SIZE(pfm_testcase_table))
return NULL;
return pfm_testcase_table[i].desc;
}
-int test__pfm_subtest_get_nr(void)
+static int test__pfm_subtest_get_nr(void)
{
return (int)ARRAY_SIZE(pfm_testcase_table);
}
-int test__pfm(struct test *test __maybe_unused, int i __maybe_unused)
+static int test__pfm(struct test *test __maybe_unused, int i __maybe_unused)
{
#ifdef HAVE_LIBPFM
if (i < 0 || i >= (int)ARRAY_SIZE(pfm_testcase_table))
@@ -211,3 +211,13 @@ int test__pfm(struct test *test __maybe_unused, int i __maybe_unused)
return TEST_SKIP;
#endif
}
+
+struct test suite__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,
+ }
+};
diff --git a/tools/perf/tests/pmu-events.c b/tools/perf/tests/pmu-events.c
index 43743cf719ef..b95b3642636c 100644
--- a/tools/perf/tests/pmu-events.c
+++ b/tools/perf/tests/pmu-events.c
@@ -1018,7 +1018,7 @@ static const struct {
},
};
-const char *test__pmu_events_subtest_get_desc(int subtest)
+static const char *test__pmu_events_subtest_get_desc(int subtest)
{
if (subtest < 0 ||
subtest >= (int)ARRAY_SIZE(pmu_events_testcase_table))
@@ -1026,7 +1026,7 @@ const char *test__pmu_events_subtest_get_desc(int subtest)
return pmu_events_testcase_table[subtest].desc;
}
-const char *test__pmu_events_subtest_skip_reason(int subtest)
+static const char *test__pmu_events_subtest_skip_reason(int subtest)
{
if (subtest < 0 ||
subtest >= (int)ARRAY_SIZE(pmu_events_testcase_table))
@@ -1036,15 +1036,26 @@ const char *test__pmu_events_subtest_skip_reason(int subtest)
return "some metrics failed";
}
-int test__pmu_events_subtest_get_nr(void)
+static int test__pmu_events_subtest_get_nr(void)
{
return (int)ARRAY_SIZE(pmu_events_testcase_table);
}
-int test__pmu_events(struct test *test __maybe_unused, int subtest)
+static int test__pmu_events(struct test *test __maybe_unused, int subtest)
{
if (subtest < 0 ||
subtest >= (int)ARRAY_SIZE(pmu_events_testcase_table))
return TEST_FAIL;
return pmu_events_testcase_table[subtest].func();
}
+
+struct test suite__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,
+ },
+};
diff --git a/tools/perf/tests/pmu.c b/tools/perf/tests/pmu.c
index 714e6830a758..9a58dad67b27 100644
--- a/tools/perf/tests/pmu.c
+++ b/tools/perf/tests/pmu.c
@@ -137,7 +137,7 @@ static struct list_head *test_terms_list(void)
return &terms;
}
-int test__pmu(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__pmu(struct test *test __maybe_unused, int subtest __maybe_unused)
{
char *format = test_format_dir_get();
LIST_HEAD(formats);
@@ -177,3 +177,5 @@ int test__pmu(struct test *test __maybe_unused, int subtest __maybe_unused)
test_format_dir_put(format);
return ret;
}
+
+DEFINE_SUITE("Parse perf pmu format", pmu);
diff --git a/tools/perf/tests/python-use.c b/tools/perf/tests/python-use.c
index 98c6d474aa6f..b667140688be 100644
--- a/tools/perf/tests/python-use.c
+++ b/tools/perf/tests/python-use.c
@@ -9,7 +9,7 @@
#include "tests.h"
#include "util/debug.h"
-int test__python_use(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__python_use(struct test *test __maybe_unused, int subtest __maybe_unused)
{
char *cmd;
int ret;
@@ -23,3 +23,5 @@ int test__python_use(struct test *test __maybe_unused, int subtest __maybe_unuse
free(cmd);
return ret;
}
+
+DEFINE_SUITE("'import perf' in python", python_use);
diff --git a/tools/perf/tests/sample-parsing.c b/tools/perf/tests/sample-parsing.c
index 8fd8a4ef97da..667518df58a3 100644
--- a/tools/perf/tests/sample-parsing.c
+++ b/tools/perf/tests/sample-parsing.c
@@ -335,7 +335,7 @@ static int do_test(u64 sample_type, u64 sample_regs, u64 read_format)
* checks sample format bits separately and together. If the test passes %0 is
* returned, otherwise %-1 is returned.
*/
-int test__sample_parsing(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__sample_parsing(struct test *test __maybe_unused, int subtest __maybe_unused)
{
const u64 rf[] = {4, 5, 6, 7, 12, 13, 14, 15};
u64 sample_type;
@@ -393,3 +393,5 @@ int test__sample_parsing(struct test *test __maybe_unused, int subtest __maybe_u
return 0;
}
+
+DEFINE_SUITE("Sample parsing", sample_parsing);
diff --git a/tools/perf/tests/sdt.c b/tools/perf/tests/sdt.c
index ed76c693f65e..307615f1b6a7 100644
--- a/tools/perf/tests/sdt.c
+++ b/tools/perf/tests/sdt.c
@@ -76,7 +76,7 @@ static int search_cached_probe(const char *target,
return ret;
}
-int test__sdt_event(struct test *test __maybe_unused, int subtests __maybe_unused)
+static int test__sdt_event(struct test *test __maybe_unused, int subtests __maybe_unused)
{
int ret = TEST_FAIL;
char __tempdir[] = "./test-buildid-XXXXXX";
@@ -114,9 +114,11 @@ int test__sdt_event(struct test *test __maybe_unused, int subtests __maybe_unuse
return ret;
}
#else
-int test__sdt_event(struct test *test __maybe_unused, int subtests __maybe_unused)
+static int test__sdt_event(struct test *test __maybe_unused, int subtests __maybe_unused)
{
pr_debug("Skip SDT event test because SDT support is not compiled\n");
return TEST_SKIP;
}
#endif
+
+DEFINE_SUITE("Probe SDT events", sdt_event);
diff --git a/tools/perf/tests/stat.c b/tools/perf/tests/stat.c
index c1911501c39c..cd119c48f1e5 100644
--- a/tools/perf/tests/stat.c
+++ b/tools/perf/tests/stat.c
@@ -47,7 +47,7 @@ static int process_stat_config_event(struct perf_tool *tool __maybe_unused,
return 0;
}
-int test__synthesize_stat_config(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__synthesize_stat_config(struct test *test __maybe_unused, int subtest __maybe_unused)
{
struct perf_stat_config stat_config = {
.aggr_mode = AGGR_CORE,
@@ -77,7 +77,7 @@ static int process_stat_event(struct perf_tool *tool __maybe_unused,
return 0;
}
-int test__synthesize_stat(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__synthesize_stat(struct test *test __maybe_unused, int subtest __maybe_unused)
{
struct perf_counts_values count;
@@ -103,7 +103,7 @@ static int process_stat_round_event(struct perf_tool *tool __maybe_unused,
return 0;
}
-int test__synthesize_stat_round(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__synthesize_stat_round(struct test *test __maybe_unused, int subtest __maybe_unused)
{
TEST_ASSERT_VAL("failed to synthesize stat_config",
!perf_event__synthesize_stat_round(NULL, 0xdeadbeef, PERF_STAT_ROUND_TYPE__INTERVAL,
@@ -111,3 +111,7 @@ int test__synthesize_stat_round(struct test *test __maybe_unused, int subtest __
return 0;
}
+
+DEFINE_SUITE("Synthesize stat config", synthesize_stat_config);
+DEFINE_SUITE("Synthesize stat", synthesize_stat);
+DEFINE_SUITE("Synthesize stat round", synthesize_stat_round);
diff --git a/tools/perf/tests/sw-clock.c b/tools/perf/tests/sw-clock.c
index 74988846be1d..db1e339a0fbe 100644
--- a/tools/perf/tests/sw-clock.c
+++ b/tools/perf/tests/sw-clock.c
@@ -133,7 +133,7 @@ static int __test__sw_clock_freq(enum perf_sw_ids clock_id)
return err;
}
-int test__sw_clock_freq(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__sw_clock_freq(struct test *test __maybe_unused, int subtest __maybe_unused)
{
int ret;
@@ -143,3 +143,5 @@ int test__sw_clock_freq(struct test *test __maybe_unused, int subtest __maybe_un
return ret;
}
+
+DEFINE_SUITE("Software clock events period values", sw_clock_freq);
diff --git a/tools/perf/tests/switch-tracking.c b/tools/perf/tests/switch-tracking.c
index 62c0ec21aaa8..9b379aaddce4 100644
--- a/tools/perf/tests/switch-tracking.c
+++ b/tools/perf/tests/switch-tracking.c
@@ -321,7 +321,7 @@ static int process_events(struct evlist *evlist,
* evsel->core.system_wide and evsel->tracking flags (respectively) with other events
* sometimes enabled or disabled.
*/
-int test__switch_tracking(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__switch_tracking(struct test *test __maybe_unused, int subtest __maybe_unused)
{
const char *sched_switch = "sched:sched_switch";
struct switch_tracking switch_tracking = { .tids = NULL, };
@@ -588,3 +588,5 @@ int test__switch_tracking(struct test *test __maybe_unused, int subtest __maybe_
err = -1;
goto out;
}
+
+DEFINE_SUITE("Track with sched_switch", switch_tracking);
diff --git a/tools/perf/tests/task-exit.c b/tools/perf/tests/task-exit.c
index 4c2969db59b0..197574230493 100644
--- a/tools/perf/tests/task-exit.c
+++ b/tools/perf/tests/task-exit.c
@@ -39,7 +39,7 @@ static void workload_exec_failed_signal(int signo __maybe_unused,
* if the number of exit event reported by the kernel is 1 or not
* in order to check the kernel returns correct number of event.
*/
-int test__task_exit(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__task_exit(struct test *test __maybe_unused, int subtest __maybe_unused)
{
int err = -1;
union perf_event *event;
@@ -151,3 +151,5 @@ int test__task_exit(struct test *test __maybe_unused, int subtest __maybe_unused
evlist__delete(evlist);
return err;
}
+
+DEFINE_SUITE("Number of exit events of a simple workload", task_exit);
diff --git a/tools/perf/tests/tests.h b/tools/perf/tests/tests.h
index 469d305d425c..f2e1c242fb1f 100644
--- a/tools/perf/tests/tests.h
+++ b/tools/perf/tests/tests.h
@@ -41,10 +41,10 @@ struct test {
};
#define DECLARE_SUITE(name) \
- int test__##name(struct test *test, int subtest)
+ extern struct test suite__##name;
#define DEFINE_SUITE(description, name) \
- static struct test name = { \
+ struct test suite__##name = { \
.desc = description, \
.func = test__##name, \
};
@@ -60,9 +60,6 @@ DECLARE_SUITE(perf_evsel__tp_sched_test);
DECLARE_SUITE(syscall_openat_tp_fields);
DECLARE_SUITE(pmu);
DECLARE_SUITE(pmu_events);
-const char *test__pmu_events_subtest_get_desc(int subtest);
-const char *test__pmu_events_subtest_skip_reason(int subtest);
-int test__pmu_events_subtest_get_nr(void);
DECLARE_SUITE(attr);
DECLARE_SUITE(dso_data);
DECLARE_SUITE(dso_data_cache);
@@ -74,9 +71,6 @@ DECLARE_SUITE(bp_signal);
DECLARE_SUITE(bp_signal_overflow);
DECLARE_SUITE(bp_accounting);
DECLARE_SUITE(wp);
-const char *test__wp_subtest_get_desc(int subtest);
-const char *test__wp_subtest_skip_reason(int subtest);
-int test__wp_subtest_get_nr(void);
DECLARE_SUITE(task_exit);
DECLARE_SUITE(mem);
DECLARE_SUITE(sw_clock_freq);
@@ -97,11 +91,7 @@ DECLARE_SUITE(fdarray__add);
DECLARE_SUITE(kmod_path__parse);
DECLARE_SUITE(thread_map);
DECLARE_SUITE(llvm);
-const char *test__llvm_subtest_get_desc(int subtest);
-int test__llvm_subtest_get_nr(void);
DECLARE_SUITE(bpf);
-const char *test__bpf_subtest_get_desc(int subtest);
-int test__bpf_subtest_get_nr(void);
DECLARE_SUITE(session_topology);
DECLARE_SUITE(thread_map_synthesize);
DECLARE_SUITE(thread_map_remove);
@@ -119,8 +109,6 @@ DECLARE_SUITE(is_printable_array);
DECLARE_SUITE(bitmap_print);
DECLARE_SUITE(perf_hooks);
DECLARE_SUITE(clang);
-const char *test__clang_subtest_get_desc(int subtest);
-int test__clang_subtest_get_nr(void);
DECLARE_SUITE(unit_number__scnprint);
DECLARE_SUITE(mem2node);
DECLARE_SUITE(maps__merge_in);
@@ -130,18 +118,14 @@ DECLARE_SUITE(api_io);
DECLARE_SUITE(demangle_java);
DECLARE_SUITE(demangle_ocaml);
DECLARE_SUITE(pfm);
-const char *test__pfm_subtest_get_desc(int subtest);
-int test__pfm_subtest_get_nr(void);
DECLARE_SUITE(parse_metric);
DECLARE_SUITE(pe_file_parsing);
DECLARE_SUITE(expand_cgroup_events);
DECLARE_SUITE(perf_time_to_tsc);
DECLARE_SUITE(dlfilter);
+int test__dwarf_unwind(struct test *test, int subtest);
bool test__bp_signal_is_supported(void);
-bool test__bp_account_is_supported(void);
-bool test__wp_is_supported(void);
-bool test__tsc_is_supported(void);
#ifdef HAVE_DWARF_UNWIND_SUPPORT
struct thread;
diff --git a/tools/perf/tests/thread-map.c b/tools/perf/tests/thread-map.c
index d1e208b4a571..7e2e8a72fa78 100644
--- a/tools/perf/tests/thread-map.c
+++ b/tools/perf/tests/thread-map.c
@@ -19,7 +19,7 @@ struct machine;
#define NAME (const char *) "perf"
#define NAMEUL (unsigned long) NAME
-int test__thread_map(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__thread_map(struct test *test __maybe_unused, int subtest __maybe_unused)
{
struct perf_thread_map *map;
@@ -86,7 +86,7 @@ static int process_event(struct perf_tool *tool __maybe_unused,
return 0;
}
-int test__thread_map_synthesize(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__thread_map_synthesize(struct test *test __maybe_unused, int subtest __maybe_unused)
{
struct perf_thread_map *threads;
@@ -106,7 +106,7 @@ int test__thread_map_synthesize(struct test *test __maybe_unused, int subtest __
return 0;
}
-int test__thread_map_remove(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__thread_map_remove(struct test *test __maybe_unused, int subtest __maybe_unused)
{
struct perf_thread_map *threads;
char *str;
@@ -145,3 +145,7 @@ int test__thread_map_remove(struct test *test __maybe_unused, int subtest __mayb
perf_thread_map__put(threads);
return 0;
}
+
+DEFINE_SUITE("Thread map", thread_map);
+DEFINE_SUITE("Synthesize thread map", thread_map_synthesize);
+DEFINE_SUITE("Remove thread map", thread_map_remove);
diff --git a/tools/perf/tests/thread-maps-share.c b/tools/perf/tests/thread-maps-share.c
index 9371484973f2..2821be0a9a05 100644
--- a/tools/perf/tests/thread-maps-share.c
+++ b/tools/perf/tests/thread-maps-share.c
@@ -4,7 +4,7 @@
#include "thread.h"
#include "debug.h"
-int test__thread_maps_share(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__thread_maps_share(struct test *test __maybe_unused, int subtest __maybe_unused)
{
struct machines machines;
struct machine *machine;
@@ -96,3 +96,5 @@ int test__thread_maps_share(struct test *test __maybe_unused, int subtest __mayb
machines__exit(&machines);
return 0;
}
+
+DEFINE_SUITE("Share thread maps", thread_maps_share);
diff --git a/tools/perf/tests/time-utils-test.c b/tools/perf/tests/time-utils-test.c
index fe57ca3b6e54..538100cb7541 100644
--- a/tools/perf/tests/time-utils-test.c
+++ b/tools/perf/tests/time-utils-test.c
@@ -131,7 +131,7 @@ static bool test__perf_time__parse_for_ranges(struct test_data *d)
return pass;
}
-int test__time_utils(struct test *t __maybe_unused, int subtest __maybe_unused)
+static int test__time_utils(struct test *t __maybe_unused, int subtest __maybe_unused)
{
bool pass = true;
@@ -249,3 +249,5 @@ int test__time_utils(struct test *t __maybe_unused, int subtest __maybe_unused)
return pass ? 0 : TEST_FAIL;
}
+
+DEFINE_SUITE("time utils", time_utils);
diff --git a/tools/perf/tests/topology.c b/tools/perf/tests/topology.c
index b9028e304ddd..05fda3955f95 100644
--- a/tools/perf/tests/topology.c
+++ b/tools/perf/tests/topology.c
@@ -173,7 +173,7 @@ static int check_cpu_topology(char *path, struct perf_cpu_map *map)
return 0;
}
-int test__session_topology(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__session_topology(struct test *test __maybe_unused, int subtest __maybe_unused)
{
char path[PATH_MAX];
struct perf_cpu_map *map;
@@ -199,3 +199,5 @@ int test__session_topology(struct test *test __maybe_unused, int subtest __maybe
unlink(path);
return ret;
}
+
+DEFINE_SUITE("Session topology", session_topology);
diff --git a/tools/perf/tests/unit_number__scnprintf.c b/tools/perf/tests/unit_number__scnprintf.c
index 3721757435da..2ad78a9473d4 100644
--- a/tools/perf/tests/unit_number__scnprintf.c
+++ b/tools/perf/tests/unit_number__scnprintf.c
@@ -7,7 +7,7 @@
#include "units.h"
#include "debug.h"
-int test__unit_number__scnprint(struct test *t __maybe_unused, int subtest __maybe_unused)
+static int test__unit_number__scnprint(struct test *t __maybe_unused, int subtest __maybe_unused)
{
struct {
u64 n;
@@ -38,3 +38,5 @@ int test__unit_number__scnprint(struct test *t __maybe_unused, int subtest __may
return TEST_OK;
}
+
+DEFINE_SUITE("unit_number__scnprintf", unit_number__scnprint);
diff --git a/tools/perf/tests/vmlinux-kallsyms.c b/tools/perf/tests/vmlinux-kallsyms.c
index 193b7c91b4e2..3b2d4256bad3 100644
--- a/tools/perf/tests/vmlinux-kallsyms.c
+++ b/tools/perf/tests/vmlinux-kallsyms.c
@@ -14,7 +14,8 @@
#define UM(x) kallsyms_map->unmap_ip(kallsyms_map, (x))
-int test__vmlinux_matches_kallsyms(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__vmlinux_matches_kallsyms(struct test *test __maybe_unused,
+ int subtest __maybe_unused)
{
int err = -1;
struct rb_node *nd;
@@ -250,3 +251,5 @@ int test__vmlinux_matches_kallsyms(struct test *test __maybe_unused, int subtest
machine__exit(&vmlinux);
return err;
}
+
+DEFINE_SUITE("vmlinux symtab matches kallsyms", vmlinux_matches_kallsyms);
diff --git a/tools/perf/tests/wp.c b/tools/perf/tests/wp.c
index 9387fa76faa5..16ab733cabce 100644
--- a/tools/perf/tests/wp.c
+++ b/tools/perf/tests/wp.c
@@ -209,19 +209,19 @@ static struct {
},
};
-int test__wp_subtest_get_nr(void)
+static int test__wp_subtest_get_nr(void)
{
return (int)ARRAY_SIZE(wp_testcase_table);
}
-const char *test__wp_subtest_get_desc(int i)
+static const char *test__wp_subtest_get_desc(int i)
{
if (i < 0 || i >= (int)ARRAY_SIZE(wp_testcase_table))
return NULL;
return wp_testcase_table[i].desc;
}
-const char *test__wp_subtest_skip_reason(int i)
+static const char *test__wp_subtest_skip_reason(int i)
{
if (i < 0 || i >= (int)ARRAY_SIZE(wp_testcase_table))
return NULL;
@@ -230,7 +230,7 @@ const char *test__wp_subtest_skip_reason(int i)
return wp_testcase_table[i].skip_msg();
}
-int test__wp(struct test *test __maybe_unused, int i)
+static int test__wp(struct test *test __maybe_unused, int i)
{
if (i < 0 || i >= (int)ARRAY_SIZE(wp_testcase_table))
return TEST_FAIL;
@@ -245,7 +245,7 @@ int test__wp(struct test *test __maybe_unused, int i)
/* The s390 so far does not have support for
* instruction breakpoint using the perf_event_open() system call.
*/
-bool test__wp_is_supported(void)
+static bool test__wp_is_supported(void)
{
#if defined(__s390x__)
return false;
@@ -253,3 +253,15 @@ bool test__wp_is_supported(void)
return true;
#endif
}
+
+struct test suite__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,
+ },
+};
--
2.33.0.464.g1972c5931b-goog
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [RFC PATCH 5/5] perf test: Rename struct test to test_suite
2021-09-22 8:19 [RFC PATCH 0/5] Start aligning perf test with kunit style Ian Rogers
` (3 preceding siblings ...)
2021-09-22 8:19 ` [RFC PATCH 4/5] perf test: Move each test suite struct to its test Ian Rogers
@ 2021-09-22 8:19 ` Ian Rogers
2021-09-22 21:55 ` [RFC PATCH 0/5] Start aligning perf test with kunit style Jiri Olsa
5 siblings, 0 replies; 16+ messages in thread
From: Ian Rogers @ 2021-09-22 8:19 UTC (permalink / raw)
To: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Mark Rutland, Alexander Shishkin, Jiri Olsa, Namhyung Kim,
Jin Yao, John Garry, Paul A . Clarke, linux-perf-users,
linux-kernel, Brendan Higgins, Daniel Latypov, David Gow
Cc: eranian, Ian Rogers
This is to align with kunit's terminology.
Signed-off-by: Ian Rogers <irogers@google.com>
---
tools/perf/arch/arm/include/arch-tests.h | 2 +-
tools/perf/arch/arm/tests/arch-tests.c | 2 +-
tools/perf/arch/arm/tests/vectors-page.c | 2 +-
tools/perf/arch/arm64/include/arch-tests.h | 2 +-
tools/perf/arch/arm64/tests/arch-tests.c | 2 +-
tools/perf/arch/powerpc/include/arch-tests.h | 2 +-
tools/perf/arch/powerpc/tests/arch-tests.c | 2 +-
tools/perf/arch/x86/include/arch-tests.h | 14 ++++++-------
tools/perf/arch/x86/tests/arch-tests.c | 2 +-
tools/perf/arch/x86/tests/bp-modify.c | 2 +-
tools/perf/arch/x86/tests/insn-x86.c | 2 +-
tools/perf/arch/x86/tests/intel-cqm.c | 2 +-
.../x86/tests/intel-pt-pkt-decoder-test.c | 2 +-
tools/perf/arch/x86/tests/rdpmc.c | 2 +-
tools/perf/arch/x86/tests/sample-parsing.c | 2 +-
tools/perf/tests/api-io.c | 2 +-
tools/perf/tests/attr.c | 2 +-
tools/perf/tests/backward-ring-buffer.c | 2 +-
tools/perf/tests/bitmap.c | 2 +-
tools/perf/tests/bp_account.c | 4 ++--
tools/perf/tests/bp_signal.c | 4 ++--
tools/perf/tests/bp_signal_overflow.c | 4 ++--
tools/perf/tests/bpf.c | 6 +++---
tools/perf/tests/builtin-test.c | 20 +++++++++----------
tools/perf/tests/clang.c | 6 +++---
tools/perf/tests/code-reading.c | 2 +-
tools/perf/tests/cpumap.c | 6 +++---
tools/perf/tests/demangle-java-test.c | 2 +-
tools/perf/tests/demangle-ocaml-test.c | 2 +-
tools/perf/tests/dlfilter-test.c | 2 +-
tools/perf/tests/dso-data.c | 6 +++---
tools/perf/tests/dwarf-unwind.c | 2 +-
tools/perf/tests/event-times.c | 2 +-
tools/perf/tests/event_update.c | 2 +-
tools/perf/tests/evsel-roundtrip-name.c | 2 +-
tools/perf/tests/evsel-tp-sched.c | 2 +-
tools/perf/tests/expand-cgroup.c | 2 +-
tools/perf/tests/expr.c | 2 +-
tools/perf/tests/fdarray.c | 4 ++--
tools/perf/tests/genelf.c | 2 +-
tools/perf/tests/hists_cumulate.c | 2 +-
tools/perf/tests/hists_filter.c | 2 +-
tools/perf/tests/hists_link.c | 2 +-
tools/perf/tests/hists_output.c | 2 +-
tools/perf/tests/is_printable_array.c | 2 +-
tools/perf/tests/keep-tracking.c | 2 +-
tools/perf/tests/kmod-path.c | 2 +-
tools/perf/tests/llvm.c | 6 +++---
tools/perf/tests/maps.c | 2 +-
tools/perf/tests/mem.c | 2 +-
tools/perf/tests/mem2node.c | 2 +-
tools/perf/tests/mmap-basic.c | 2 +-
tools/perf/tests/mmap-thread-lookup.c | 2 +-
tools/perf/tests/openat-syscall-all-cpus.c | 2 +-
tools/perf/tests/openat-syscall-tp-fields.c | 2 +-
tools/perf/tests/openat-syscall.c | 2 +-
tools/perf/tests/parse-events.c | 2 +-
tools/perf/tests/parse-metric.c | 2 +-
tools/perf/tests/parse-no-sample-id-all.c | 2 +-
tools/perf/tests/pe-file-parsing.c | 4 ++--
tools/perf/tests/perf-hooks.c | 2 +-
tools/perf/tests/perf-record.c | 2 +-
tools/perf/tests/perf-time-to-tsc.c | 4 ++--
tools/perf/tests/pfm.c | 4 ++--
tools/perf/tests/pmu-events.c | 4 ++--
tools/perf/tests/pmu.c | 2 +-
tools/perf/tests/python-use.c | 2 +-
tools/perf/tests/sample-parsing.c | 2 +-
tools/perf/tests/sdt.c | 4 ++--
tools/perf/tests/stat.c | 6 +++---
tools/perf/tests/sw-clock.c | 2 +-
tools/perf/tests/switch-tracking.c | 2 +-
tools/perf/tests/task-exit.c | 2 +-
tools/perf/tests/tests.h | 10 +++++-----
tools/perf/tests/thread-map.c | 6 +++---
tools/perf/tests/thread-maps-share.c | 2 +-
tools/perf/tests/time-utils-test.c | 2 +-
tools/perf/tests/topology.c | 2 +-
tools/perf/tests/unit_number__scnprintf.c | 2 +-
tools/perf/tests/vmlinux-kallsyms.c | 2 +-
tools/perf/tests/wp.c | 4 ++--
81 files changed, 124 insertions(+), 124 deletions(-)
diff --git a/tools/perf/arch/arm/include/arch-tests.h b/tools/perf/arch/arm/include/arch-tests.h
index 37039e80f18b..452b3d904521 100644
--- a/tools/perf/arch/arm/include/arch-tests.h
+++ b/tools/perf/arch/arm/include/arch-tests.h
@@ -2,6 +2,6 @@
#ifndef ARCH_TESTS_H
#define ARCH_TESTS_H
-extern struct test *arch_tests[];
+extern struct test_suite *arch_tests[];
#endif
diff --git a/tools/perf/arch/arm/tests/arch-tests.c b/tools/perf/arch/arm/tests/arch-tests.c
index 83eb53f2f1d4..f2533d8bc74a 100644
--- a/tools/perf/arch/arm/tests/arch-tests.c
+++ b/tools/perf/arch/arm/tests/arch-tests.c
@@ -8,7 +8,7 @@ DEFINE_SUITE("DWARF unwind", dwarf_unwind);
#endif
DEFINE_SUITE("Vectors page", vectors_page);
-struct test *arch_tests[] = {
+struct test_suite *arch_tests[] = {
#ifdef HAVE_DWARF_UNWIND_SUPPORT
&suite__dwarf_unwind,
#endif
diff --git a/tools/perf/arch/arm/tests/vectors-page.c b/tools/perf/arch/arm/tests/vectors-page.c
index 7ffdd79971c8..f339835558ca 100644
--- a/tools/perf/arch/arm/tests/vectors-page.c
+++ b/tools/perf/arch/arm/tests/vectors-page.c
@@ -9,7 +9,7 @@
#define VECTORS__MAP_NAME "[vectors]"
-int test__vectors_page(struct test *test __maybe_unused,
+int test__vectors_page(struct test_suite *test __maybe_unused,
int subtest __maybe_unused)
{
void *start, *end;
diff --git a/tools/perf/arch/arm64/include/arch-tests.h b/tools/perf/arch/arm64/include/arch-tests.h
index 37039e80f18b..452b3d904521 100644
--- a/tools/perf/arch/arm64/include/arch-tests.h
+++ b/tools/perf/arch/arm64/include/arch-tests.h
@@ -2,6 +2,6 @@
#ifndef ARCH_TESTS_H
#define ARCH_TESTS_H
-extern struct test *arch_tests[];
+extern struct test_suite *arch_tests[];
#endif
diff --git a/tools/perf/arch/arm64/tests/arch-tests.c b/tools/perf/arch/arm64/tests/arch-tests.c
index 284fd089e24c..bf494b004a4d 100644
--- a/tools/perf/arch/arm64/tests/arch-tests.c
+++ b/tools/perf/arch/arm64/tests/arch-tests.c
@@ -7,7 +7,7 @@
DEFINE_SUITE("DWARF unwind", dwarf_unwind);
#endif
-struct test *arch_tests[] = {
+struct test_suite *arch_tests[] = {
#ifdef HAVE_DWARF_UNWIND_SUPPORT
&suite__dwarf_unwind,
#endif
diff --git a/tools/perf/arch/powerpc/include/arch-tests.h b/tools/perf/arch/powerpc/include/arch-tests.h
index 37039e80f18b..452b3d904521 100644
--- a/tools/perf/arch/powerpc/include/arch-tests.h
+++ b/tools/perf/arch/powerpc/include/arch-tests.h
@@ -2,6 +2,6 @@
#ifndef ARCH_TESTS_H
#define ARCH_TESTS_H
-extern struct test *arch_tests[];
+extern struct test_suite *arch_tests[];
#endif
diff --git a/tools/perf/arch/powerpc/tests/arch-tests.c b/tools/perf/arch/powerpc/tests/arch-tests.c
index 284fd089e24c..bf494b004a4d 100644
--- a/tools/perf/arch/powerpc/tests/arch-tests.c
+++ b/tools/perf/arch/powerpc/tests/arch-tests.c
@@ -7,7 +7,7 @@
DEFINE_SUITE("DWARF unwind", dwarf_unwind);
#endif
-struct test *arch_tests[] = {
+struct test_suite *arch_tests[] = {
#ifdef HAVE_DWARF_UNWIND_SUPPORT
&suite__dwarf_unwind,
#endif
diff --git a/tools/perf/arch/x86/include/arch-tests.h b/tools/perf/arch/x86/include/arch-tests.h
index d6db9f72b6af..6a1a1b3c0827 100644
--- a/tools/perf/arch/x86/include/arch-tests.h
+++ b/tools/perf/arch/x86/include/arch-tests.h
@@ -2,15 +2,15 @@
#ifndef ARCH_TESTS_H
#define ARCH_TESTS_H
-struct test;
+struct test_suite;
/* Tests */
-int test__rdpmc(struct test *test, int subtest);
-int test__insn_x86(struct test *test, int subtest);
-int test__intel_pt_pkt_decoder(struct test *test, int subtest);
-int test__bp_modify(struct test *test, int subtest);
-int test__x86_sample_parsing(struct test *test, int subtest);
+int test__rdpmc(struct test_suite *test, int subtest);
+int test__insn_x86(struct test_suite *test, int subtest);
+int test__intel_pt_pkt_decoder(struct test_suite *test, int subtest);
+int test__bp_modify(struct test_suite *test, int subtest);
+int test__x86_sample_parsing(struct test_suite *test, int subtest);
-extern struct test *arch_tests[];
+extern struct test_suite *arch_tests[];
#endif
diff --git a/tools/perf/arch/x86/tests/arch-tests.c b/tools/perf/arch/x86/tests/arch-tests.c
index ad7eb33feacd..2eab8f4bf881 100644
--- a/tools/perf/arch/x86/tests/arch-tests.c
+++ b/tools/perf/arch/x86/tests/arch-tests.c
@@ -16,7 +16,7 @@ DEFINE_SUITE("x86 bp modify", bp_modify);
#endif
DEFINE_SUITE("x86 Sample parsing", x86_sample_parsing);
-struct test *arch_tests[] = {
+struct test_suite *arch_tests[] = {
&suite__rdpmc,
#ifdef HAVE_DWARF_UNWIND_SUPPORT
&suite__dwarf_unwind,
diff --git a/tools/perf/arch/x86/tests/bp-modify.c b/tools/perf/arch/x86/tests/bp-modify.c
index dffcf9b52153..0924ccd9e36d 100644
--- a/tools/perf/arch/x86/tests/bp-modify.c
+++ b/tools/perf/arch/x86/tests/bp-modify.c
@@ -204,7 +204,7 @@ static int bp_modify2(void)
return rip == (unsigned long) bp_1 ? TEST_OK : TEST_FAIL;
}
-int test__bp_modify(struct test *test __maybe_unused,
+int test__bp_modify(struct test_suite *test __maybe_unused,
int subtest __maybe_unused)
{
TEST_ASSERT_VAL("modify test 1 failed\n", !bp_modify1());
diff --git a/tools/perf/arch/x86/tests/insn-x86.c b/tools/perf/arch/x86/tests/insn-x86.c
index 0262b0d8ccf5..94b490c434d0 100644
--- a/tools/perf/arch/x86/tests/insn-x86.c
+++ b/tools/perf/arch/x86/tests/insn-x86.c
@@ -173,7 +173,7 @@ static int test_data_set(struct test_data *dat_set, int x86_64)
* verbose (-v) option to see all the instructions and whether or not they
* decoded successfully.
*/
-int test__insn_x86(struct test *test __maybe_unused, int subtest __maybe_unused)
+int test__insn_x86(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
int ret = 0;
diff --git a/tools/perf/arch/x86/tests/intel-cqm.c b/tools/perf/arch/x86/tests/intel-cqm.c
index 27dd8cf9e060..cb5b2c6c3b3b 100644
--- a/tools/perf/arch/x86/tests/intel-cqm.c
+++ b/tools/perf/arch/x86/tests/intel-cqm.c
@@ -37,7 +37,7 @@ static pid_t spawn(void)
* the last read counter value to avoid triggering a WARN_ON_ONCE() in
* smp_call_function_many() caused by sending IPIs from NMI context.
*/
-int test__intel_cqm_count_nmi_context(struct test *test __maybe_unused, int subtest __maybe_unused)
+int test__intel_cqm_count_nmi_context(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
struct evlist *evlist = NULL;
struct evsel *evsel = NULL;
diff --git a/tools/perf/arch/x86/tests/intel-pt-pkt-decoder-test.c b/tools/perf/arch/x86/tests/intel-pt-pkt-decoder-test.c
index c933e3dcd0a8..2fc882ab24c1 100644
--- a/tools/perf/arch/x86/tests/intel-pt-pkt-decoder-test.c
+++ b/tools/perf/arch/x86/tests/intel-pt-pkt-decoder-test.c
@@ -289,7 +289,7 @@ static int test_one(struct test_data *d)
* This test feeds byte sequences to the Intel PT packet decoder and checks the
* results. Changes to the packet context are also checked.
*/
-int test__intel_pt_pkt_decoder(struct test *test __maybe_unused, int subtest __maybe_unused)
+int test__intel_pt_pkt_decoder(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
struct test_data *d = data;
int ret;
diff --git a/tools/perf/arch/x86/tests/rdpmc.c b/tools/perf/arch/x86/tests/rdpmc.c
index 1ea916656a2d..498413ad9c97 100644
--- a/tools/perf/arch/x86/tests/rdpmc.c
+++ b/tools/perf/arch/x86/tests/rdpmc.c
@@ -157,7 +157,7 @@ static int __test__rdpmc(void)
return 0;
}
-int test__rdpmc(struct test *test __maybe_unused, int subtest __maybe_unused)
+int test__rdpmc(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
int status = 0;
int wret = 0;
diff --git a/tools/perf/arch/x86/tests/sample-parsing.c b/tools/perf/arch/x86/tests/sample-parsing.c
index c92db87e4479..bfbd3662b69e 100644
--- a/tools/perf/arch/x86/tests/sample-parsing.c
+++ b/tools/perf/arch/x86/tests/sample-parsing.c
@@ -115,7 +115,7 @@ static int do_test(u64 sample_type)
* For now, the PERF_SAMPLE_WEIGHT_STRUCT is the only X86 specific sample type.
* The test only checks the PERF_SAMPLE_WEIGHT_STRUCT type.
*/
-int test__x86_sample_parsing(struct test *test __maybe_unused, int subtest __maybe_unused)
+int test__x86_sample_parsing(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
return do_test(PERF_SAMPLE_WEIGHT_STRUCT);
}
diff --git a/tools/perf/tests/api-io.c b/tools/perf/tests/api-io.c
index af4913967514..e91cf2c127f1 100644
--- a/tools/perf/tests/api-io.c
+++ b/tools/perf/tests/api-io.c
@@ -289,7 +289,7 @@ static int test_get_dec(void)
return ret;
}
-static int test__api_io(struct test *test __maybe_unused,
+static int test__api_io(struct test_suite *test __maybe_unused,
int subtest __maybe_unused)
{
int ret = 0;
diff --git a/tools/perf/tests/attr.c b/tools/perf/tests/attr.c
index f1461051f579..0f73e300f207 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;
}
-static int test__attr(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__attr(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
struct stat st;
char path_perf[PATH_MAX];
diff --git a/tools/perf/tests/backward-ring-buffer.c b/tools/perf/tests/backward-ring-buffer.c
index 180e16917658..79e51a260b15 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,
}
-static int test__backward_ring_buffer(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__backward_ring_buffer(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
int ret = TEST_SKIP, err, sample_count = 0, comm_count = 0;
char pid[16], sbuf[STRERR_BUFSIZE];
diff --git a/tools/perf/tests/bitmap.c b/tools/perf/tests/bitmap.c
index 13d1d1d6774f..384856347236 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;
}
-static int test__bitmap_print(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__bitmap_print(struct test_suite *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"));
diff --git a/tools/perf/tests/bp_account.c b/tools/perf/tests/bp_account.c
index 76cf356ba13f..365120146d17 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
*/
-static int test__bp_accounting(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__bp_accounting(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
int has_ioctl = detect_ioctl();
int wp_cnt = detect_cnt(false);
@@ -205,7 +205,7 @@ static bool test__bp_account_is_supported(void)
#endif
}
-struct test suite__bp_accounting = {
+struct test_suite 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 c19b05488cfb..3c269f81818a 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;
}
-static int test__bp_signal(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__bp_signal(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
struct sigaction sa;
long long count1, count2, count3;
@@ -312,7 +312,7 @@ bool test__bp_signal_is_supported(void)
#endif
}
-struct test suite__bp_signal = {
+struct test_suite 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 99c30d028f5e..5ac6e1393cf4 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
-static int test__bp_signal_overflow(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__bp_signal_overflow(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
struct perf_event_attr pe;
struct sigaction sa;
@@ -134,7 +134,7 @@ static int test__bp_signal_overflow(struct test *test __maybe_unused, int subtes
return fails ? TEST_FAIL : TEST_OK;
}
-struct test suite__bp_signal_overflow = {
+struct test_suite 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 74496a0fc973..274fdd5318a5 100644
--- a/tools/perf/tests/bpf.c
+++ b/tools/perf/tests/bpf.c
@@ -324,7 +324,7 @@ static int check_env(void)
return 0;
}
-static int test__bpf(struct test *test __maybe_unused, int i)
+static int test__bpf(struct test_suite *test __maybe_unused, int i)
{
int err;
@@ -354,14 +354,14 @@ static const char *test__bpf_subtest_get_desc(int i __maybe_unused)
return NULL;
}
-static int test__bpf(struct test *test __maybe_unused, int i __maybe_unused)
+static int test__bpf(struct test_suite *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 = {
+struct test_suite suite__bpf = {
.desc = "BPF filter",
.func = test__bpf,
.subtest = {
diff --git a/tools/perf/tests/builtin-test.c b/tools/perf/tests/builtin-test.c
index 07467ec43100..7d52e2eb8147 100644
--- a/tools/perf/tests/builtin-test.c
+++ b/tools/perf/tests/builtin-test.c
@@ -30,11 +30,11 @@
static bool dont_fork;
-struct test *__weak arch_tests[] = {
+struct test_suite *__weak arch_tests[] = {
NULL,
};
-static struct test *generic_tests[] = {
+static struct test_suite *generic_tests[] = {
&suite__vmlinux_matches_kallsyms,
&suite__openat_syscall_event,
&suite__openat_syscall_event_on_all_cpus,
@@ -110,7 +110,7 @@ static struct test *generic_tests[] = {
NULL,
};
-static struct test **tests[] = {
+static struct test_suite **tests[] = {
generic_tests,
arch_tests,
};
@@ -139,7 +139,7 @@ static bool perf_test__matches(const char *desc, int curr, int argc, const char
return false;
}
-static int run_test(struct test *test, int subtest)
+static int run_test(struct test_suite *test, int subtest)
{
int status, err = -1, child = dont_fork ? 0 : fork();
char sbuf[STRERR_BUFSIZE];
@@ -195,7 +195,7 @@ static int run_test(struct test *test, int subtest)
for (j = 0; j < ARRAY_SIZE(tests); j++) \
for (k = 0, t = tests[j][k]; tests[j][k]; k++, t = tests[j][k])
-static int test_and_print(struct test *t, bool force_skip, int subtest)
+static int test_and_print(struct test_suite *t, bool force_skip, int subtest)
{
int err;
@@ -321,7 +321,7 @@ struct shell_test {
const char *file;
};
-static int shell_test__run(struct test *test, int subdir __maybe_unused)
+static int shell_test__run(struct test_suite *test, int subdir __maybe_unused)
{
int err;
char script[PATH_MAX];
@@ -363,7 +363,7 @@ static int run_shell_tests(int argc, const char *argv[], int i, int width,
for_each_shell_test(entlist, n_dirs, st.dir, ent) {
int curr = i++;
char desc[256];
- struct test test = {
+ struct test_suite test = {
.desc = shell_test__description(desc, sizeof(desc), st.dir, ent->d_name),
.func = shell_test__run,
.priv = &st,
@@ -391,7 +391,7 @@ static int run_shell_tests(int argc, const char *argv[], int i, int width,
static int __cmd_test(int argc, const char *argv[], struct intlist *skiplist)
{
- struct test *t;
+ struct test_suite *t;
unsigned int j, k;
int i = 0;
int width = shell_tests__max_desc_width();
@@ -500,7 +500,7 @@ static int perf_test__list_shell(int argc, const char **argv, int i)
for_each_shell_test(entlist, n_dirs, path, ent) {
int curr = i++;
char bf[256];
- struct test t = {
+ struct test_suite t = {
.desc = shell_test__description(bf, sizeof(bf), path, ent->d_name),
};
@@ -520,7 +520,7 @@ static int perf_test__list_shell(int argc, const char **argv, int i)
static int perf_test__list(int argc, const char **argv)
{
unsigned int j, k;
- struct test *t;
+ struct test_suite *t;
int i = 0;
for_each_test(j, k, t) {
diff --git a/tools/perf/tests/clang.c b/tools/perf/tests/clang.c
index 5052be1b5b20..a499fcf37bf9 100644
--- a/tools/perf/tests/clang.c
+++ b/tools/perf/tests/clang.c
@@ -32,12 +32,12 @@ static const char *test__clang_subtest_get_desc(int i)
}
#ifndef HAVE_LIBCLANGLLVM_SUPPORT
-static int test__clang(struct test *test __maybe_unused, int i __maybe_unused)
+static int test__clang(struct test_suite *test __maybe_unused, int i __maybe_unused)
{
return TEST_SKIP;
}
#else
-static int test__clang(struct test *test __maybe_unused, int i)
+static int test__clang(struct test_suite *test __maybe_unused, int i)
{
if (i < 0 || i >= (int)ARRAY_SIZE(clang_testcase_table))
return TEST_FAIL;
@@ -45,7 +45,7 @@ static int test__clang(struct test *test __maybe_unused, int i)
}
#endif
-struct test suite__clang = {
+struct test_suite suite__clang = {
.desc = "builtin clang support",
.func = test__clang,
.subtest = {
diff --git a/tools/perf/tests/code-reading.c b/tools/perf/tests/code-reading.c
index 0c7c87438100..517a4cd38b4a 100644
--- a/tools/perf/tests/code-reading.c
+++ b/tools/perf/tests/code-reading.c
@@ -715,7 +715,7 @@ static int do_test_code_reading(bool try_kcore)
return err;
}
-static int test__code_reading(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__code_reading(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
int ret;
diff --git a/tools/perf/tests/cpumap.c b/tools/perf/tests/cpumap.c
index 6f2525fb9fd7..89a155092f85 100644
--- a/tools/perf/tests/cpumap.c
+++ b/tools/perf/tests/cpumap.c
@@ -75,7 +75,7 @@ static int process_event_cpus(struct perf_tool *tool __maybe_unused,
}
-static int test__cpu_map_synthesize(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__cpu_map_synthesize(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
struct perf_cpu_map *cpus;
@@ -111,7 +111,7 @@ static int cpu_map_print(const char *str)
return !strcmp(buf, str);
}
-static int test__cpu_map_print(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__cpu_map_print(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
TEST_ASSERT_VAL("failed to convert map", cpu_map_print("1"));
TEST_ASSERT_VAL("failed to convert map", cpu_map_print("1,5"));
@@ -123,7 +123,7 @@ static int test__cpu_map_print(struct test *test __maybe_unused, int subtest __m
return 0;
}
-static int test__cpu_map_merge(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__cpu_map_merge(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
struct perf_cpu_map *a = perf_cpu_map__new("4,2,1");
struct perf_cpu_map *b = perf_cpu_map__new("4,5,7");
diff --git a/tools/perf/tests/demangle-java-test.c b/tools/perf/tests/demangle-java-test.c
index 37f488e5c36d..44d1be303b67 100644
--- a/tools/perf/tests/demangle-java-test.c
+++ b/tools/perf/tests/demangle-java-test.c
@@ -7,7 +7,7 @@
#include "debug.h"
#include "demangle-java.h"
-static int test__demangle_java(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__demangle_java(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
int ret = TEST_OK;
char *buf = NULL;
diff --git a/tools/perf/tests/demangle-ocaml-test.c b/tools/perf/tests/demangle-ocaml-test.c
index ee982cca7bbf..90a4285e2ad5 100644
--- a/tools/perf/tests/demangle-ocaml-test.c
+++ b/tools/perf/tests/demangle-ocaml-test.c
@@ -7,7 +7,7 @@
#include "debug.h"
#include "demangle-ocaml.h"
-static int test__demangle_ocaml(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__demangle_ocaml(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
int ret = TEST_OK;
char *buf = NULL;
diff --git a/tools/perf/tests/dlfilter-test.c b/tools/perf/tests/dlfilter-test.c
index 378f5afc6032..84352d55347d 100644
--- a/tools/perf/tests/dlfilter-test.c
+++ b/tools/perf/tests/dlfilter-test.c
@@ -398,7 +398,7 @@ static void test_data__free(struct test_data *td)
}
}
-static int test__dlfilter(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__dlfilter(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
struct test_data td = {.fd = -1};
int pid = getpid();
diff --git a/tools/perf/tests/dso-data.c b/tools/perf/tests/dso-data.c
index d9e060a7c1f6..3419a4ab5590 100644
--- a/tools/perf/tests/dso-data.c
+++ b/tools/perf/tests/dso-data.c
@@ -113,7 +113,7 @@ static int dso__data_fd(struct dso *dso, struct machine *machine)
return fd;
}
-static int test__dso_data(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__dso_data(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
struct machine machine;
struct dso *dso;
@@ -248,7 +248,7 @@ static int set_fd_limit(int n)
return setrlimit(RLIMIT_NOFILE, &rlim);
}
-static int test__dso_data_cache(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__dso_data_cache(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
struct machine machine;
long nr_end, nr = open_files_cnt();
@@ -318,7 +318,7 @@ static long new_limit(int count)
return ret;
}
-static int test__dso_data_reopen(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__dso_data_reopen(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
struct machine machine;
long nr_end, nr = open_files_cnt(), lim = new_limit(3);
diff --git a/tools/perf/tests/dwarf-unwind.c b/tools/perf/tests/dwarf-unwind.c
index a288035eb362..49c96b2b95d2 100644
--- a/tools/perf/tests/dwarf-unwind.c
+++ b/tools/perf/tests/dwarf-unwind.c
@@ -170,7 +170,7 @@ noinline int test_dwarf_unwind__krava_1(struct thread *thread)
return test_dwarf_unwind__krava_2(thread);
}
-int test__dwarf_unwind(struct test *test __maybe_unused, int subtest __maybe_unused)
+int test__dwarf_unwind(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
struct machine *machine;
struct thread *thread;
diff --git a/tools/perf/tests/event-times.c b/tools/perf/tests/event-times.c
index 2ce8945931e7..7606eb3df92f 100644
--- a/tools/perf/tests/event-times.c
+++ b/tools/perf/tests/event-times.c
@@ -216,7 +216,7 @@ static int test_times(int (attach)(struct evlist *),
* and checks that enabled and running times
* match.
*/
-static int test__event_times(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__event_times(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
int err, ret = 0;
diff --git a/tools/perf/tests/event_update.c b/tools/perf/tests/event_update.c
index 9dfb665f8ac9..fbb68deba59f 100644
--- a/tools/perf/tests/event_update.c
+++ b/tools/perf/tests/event_update.c
@@ -83,7 +83,7 @@ static int process_event_cpus(struct perf_tool *tool __maybe_unused,
return 0;
}
-static int test__event_update(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__event_update(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
struct evsel *evsel;
struct event_name tmp;
diff --git a/tools/perf/tests/evsel-roundtrip-name.c b/tools/perf/tests/evsel-roundtrip-name.c
index 4338285d1ad5..c9fbcea756fd 100644
--- a/tools/perf/tests/evsel-roundtrip-name.c
+++ b/tools/perf/tests/evsel-roundtrip-name.c
@@ -99,7 +99,7 @@ static int __perf_evsel__name_array_test(const char *names[], int nr_names,
#define perf_evsel__name_array_test(names, distance) \
__perf_evsel__name_array_test(names, ARRAY_SIZE(names), distance)
-static int test__perf_evsel__roundtrip_name_test(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__perf_evsel__roundtrip_name_test(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
int err = 0, ret = 0;
diff --git a/tools/perf/tests/evsel-tp-sched.c b/tools/perf/tests/evsel-tp-sched.c
index 1603841fcb98..79e876015c44 100644
--- a/tools/perf/tests/evsel-tp-sched.c
+++ b/tools/perf/tests/evsel-tp-sched.c
@@ -32,7 +32,7 @@ static int evsel__test_field(struct evsel *evsel, const char *name, int size, bo
return ret;
}
-static int test__perf_evsel__tp_sched_test(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__perf_evsel__tp_sched_test(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
struct evsel *evsel = evsel__newtp("sched", "sched_switch");
int ret = 0;
diff --git a/tools/perf/tests/expand-cgroup.c b/tools/perf/tests/expand-cgroup.c
index 577bc6c324b5..8ef9cd56fe4f 100644
--- a/tools/perf/tests/expand-cgroup.c
+++ b/tools/perf/tests/expand-cgroup.c
@@ -219,7 +219,7 @@ static int expand_metric_events(void)
return ret;
}
-static int test__expand_cgroup_events(struct test *test __maybe_unused,
+static int test__expand_cgroup_events(struct test_suite *test __maybe_unused,
int subtest __maybe_unused)
{
int ret;
diff --git a/tools/perf/tests/expr.c b/tools/perf/tests/expr.c
index 9e1d1461e34f..b47e2e38a276 100644
--- a/tools/perf/tests/expr.c
+++ b/tools/perf/tests/expr.c
@@ -16,7 +16,7 @@ static int test(struct expr_parse_ctx *ctx, const char *e, double val2)
return 0;
}
-static int test__expr(struct test *t __maybe_unused, int subtest __maybe_unused)
+static int test__expr(struct test_suite *t __maybe_unused, int subtest __maybe_unused)
{
struct expr_id_data *val_ptr;
const char *p;
diff --git a/tools/perf/tests/fdarray.c b/tools/perf/tests/fdarray.c
index 7b2f6c2ad705..40983c3574b1 100644
--- a/tools/perf/tests/fdarray.c
+++ b/tools/perf/tests/fdarray.c
@@ -28,7 +28,7 @@ static int fdarray__fprintf_prefix(struct fdarray *fda, const char *prefix, FILE
return printed + fdarray__fprintf(fda, fp);
}
-static int test__fdarray__filter(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__fdarray__filter(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
int nr_fds, err = TEST_FAIL;
struct fdarray *fda = fdarray__new(5, 5);
@@ -89,7 +89,7 @@ static int test__fdarray__filter(struct test *test __maybe_unused, int subtest _
return err;
}
-static int test__fdarray__add(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__fdarray__add(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
int err = TEST_FAIL;
struct fdarray *fda = fdarray__new(2, 2);
diff --git a/tools/perf/tests/genelf.c b/tools/perf/tests/genelf.c
index 3c5ced5d9588..95f3be1b683a 100644
--- a/tools/perf/tests/genelf.c
+++ b/tools/perf/tests/genelf.c
@@ -16,7 +16,7 @@
#define TEMPL "/tmp/perf-test-XXXXXX"
-static int test__jit_write_elf(struct test *test __maybe_unused,
+static int test__jit_write_elf(struct test_suite *test __maybe_unused,
int subtest __maybe_unused)
{
#ifdef HAVE_JITDUMP
diff --git a/tools/perf/tests/hists_cumulate.c b/tools/perf/tests/hists_cumulate.c
index f7a8d3d78389..17f4fcd6bdce 100644
--- a/tools/perf/tests/hists_cumulate.c
+++ b/tools/perf/tests/hists_cumulate.c
@@ -689,7 +689,7 @@ static int test4(struct evsel *evsel, struct machine *machine)
return err;
}
-static int test__hists_cumulate(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__hists_cumulate(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
int err = TEST_FAIL;
struct machines machines;
diff --git a/tools/perf/tests/hists_filter.c b/tools/perf/tests/hists_filter.c
index 09e140191e5f..08cbeb9e39ae 100644
--- a/tools/perf/tests/hists_filter.c
+++ b/tools/perf/tests/hists_filter.c
@@ -101,7 +101,7 @@ static int add_hist_entries(struct evlist *evlist,
return TEST_FAIL;
}
-static int test__hists_filter(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__hists_filter(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
int err = TEST_FAIL;
struct machines machines;
diff --git a/tools/perf/tests/hists_link.c b/tools/perf/tests/hists_link.c
index 08571f788884..c575e13a850d 100644
--- a/tools/perf/tests/hists_link.c
+++ b/tools/perf/tests/hists_link.c
@@ -264,7 +264,7 @@ static int validate_link(struct hists *leader, struct hists *other)
return __validate_link(leader, 0) || __validate_link(other, 1);
}
-static int test__hists_link(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__hists_link(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
int err = -1;
struct hists *hists, *first_hists;
diff --git a/tools/perf/tests/hists_output.c b/tools/perf/tests/hists_output.c
index b427df8ee94a..0bde4a768c15 100644
--- a/tools/perf/tests/hists_output.c
+++ b/tools/perf/tests/hists_output.c
@@ -575,7 +575,7 @@ static int test5(struct evsel *evsel, struct machine *machine)
return err;
}
-static int test__hists_output(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__hists_output(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
int err = TEST_FAIL;
struct machines machines;
diff --git a/tools/perf/tests/is_printable_array.c b/tools/perf/tests/is_printable_array.c
index 8891b10fac5c..f72de2457ff1 100644
--- a/tools/perf/tests/is_printable_array.c
+++ b/tools/perf/tests/is_printable_array.c
@@ -5,7 +5,7 @@
#include "debug.h"
#include "print_binary.h"
-static int test__is_printable_array(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__is_printable_array(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
char buf1[] = { 'k', 'r', 4, 'v', 'a', 0 };
char buf2[] = { 'k', 'r', 'a', 'v', 4, 0 };
diff --git a/tools/perf/tests/keep-tracking.c b/tools/perf/tests/keep-tracking.c
index e723c976dc81..dd2067312452 100644
--- a/tools/perf/tests/keep-tracking.c
+++ b/tools/perf/tests/keep-tracking.c
@@ -61,7 +61,7 @@ static int find_comm(struct evlist *evlist, const char *comm)
* when an event is disabled but a dummy software event is not disabled. If the
* test passes %0 is returned, otherwise %-1 is returned.
*/
-static int test__keep_tracking(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__keep_tracking(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
struct record_opts opts = {
.mmap_pages = UINT_MAX,
diff --git a/tools/perf/tests/kmod-path.c b/tools/perf/tests/kmod-path.c
index 4935dd3182ed..dfe1bd5dabaa 100644
--- a/tools/perf/tests/kmod-path.c
+++ b/tools/perf/tests/kmod-path.c
@@ -47,7 +47,7 @@ static int test_is_kernel_module(const char *path, int cpumode, bool expect)
#define M(path, c, e) \
TEST_ASSERT_VAL("failed", !test_is_kernel_module(path, c, e))
-static int test__kmod_path__parse(struct test *t __maybe_unused, int subtest __maybe_unused)
+static int test__kmod_path__parse(struct test_suite *t __maybe_unused, int subtest __maybe_unused)
{
/* path alloc_name kmod comp name */
T("/xxxx/xxxx/x-x.ko", true , true, 0 , "[x_x]");
diff --git a/tools/perf/tests/llvm.c b/tools/perf/tests/llvm.c
index b605a71ad8d5..057d6a59a8ea 100644
--- a/tools/perf/tests/llvm.c
+++ b/tools/perf/tests/llvm.c
@@ -124,7 +124,7 @@ test_llvm__fetch_bpf_obj(void **p_obj_buf,
return ret;
}
-static int test__llvm(struct test *test __maybe_unused, int subtest)
+static int test__llvm(struct test_suite *test __maybe_unused, int subtest)
{
int ret;
void *obj_buf = NULL;
@@ -162,7 +162,7 @@ static const char *test__llvm_subtest_get_desc(int subtest)
return bpf_source_table[subtest].desc;
}
#else //HAVE_LIBBPF_SUPPORT
-static int test__llvm(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__llvm(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
return TEST_SKIP;
}
@@ -178,7 +178,7 @@ static const char *test__llvm_subtest_get_desc(int subtest __maybe_unused)
}
#endif // HAVE_LIBBPF_SUPPORT
-struct test suite__llvm = {
+struct test_suite suite__llvm = {
.desc = "LLVM search and compile",
.func = test__llvm,
.subtest = {
diff --git a/tools/perf/tests/maps.c b/tools/perf/tests/maps.c
index 4a2e6f312015..e308a3296cef 100644
--- a/tools/perf/tests/maps.c
+++ b/tools/perf/tests/maps.c
@@ -33,7 +33,7 @@ static int check_maps(struct map_def *merged, unsigned int size, struct maps *ma
return TEST_OK;
}
-static int test__maps__merge_in(struct test *t __maybe_unused, int subtest __maybe_unused)
+static int test__maps__merge_in(struct test_suite *t __maybe_unused, int subtest __maybe_unused)
{
struct maps maps;
unsigned int i;
diff --git a/tools/perf/tests/mem.c b/tools/perf/tests/mem.c
index 3af082508653..56014ec7d49d 100644
--- a/tools/perf/tests/mem.c
+++ b/tools/perf/tests/mem.c
@@ -23,7 +23,7 @@ static int check(union perf_mem_data_src data_src,
return 0;
}
-static int test__mem(struct test *text __maybe_unused, int subtest __maybe_unused)
+static int test__mem(struct test_suite *text __maybe_unused, int subtest __maybe_unused)
{
int ret = 0;
union perf_mem_data_src src;
diff --git a/tools/perf/tests/mem2node.c b/tools/perf/tests/mem2node.c
index 0a90e6084d81..b17b86391383 100644
--- a/tools/perf/tests/mem2node.c
+++ b/tools/perf/tests/mem2node.c
@@ -43,7 +43,7 @@ static unsigned long *get_bitmap(const char *str, int nbits)
return bm && map ? bm : NULL;
}
-static int test__mem2node(struct test *t __maybe_unused, int subtest __maybe_unused)
+static int test__mem2node(struct test_suite *t __maybe_unused, int subtest __maybe_unused)
{
struct mem2node map;
struct memory_node nodes[3];
diff --git a/tools/perf/tests/mmap-basic.c b/tools/perf/tests/mmap-basic.c
index 86f34631312d..90b2feda31ac 100644
--- a/tools/perf/tests/mmap-basic.c
+++ b/tools/perf/tests/mmap-basic.c
@@ -29,7 +29,7 @@
* Then it checks if the number of syscalls reported as perf events by
* the kernel corresponds to the number of syscalls made.
*/
-static int test__basic_mmap(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__basic_mmap(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
int err = -1;
union perf_event *event;
diff --git a/tools/perf/tests/mmap-thread-lookup.c b/tools/perf/tests/mmap-thread-lookup.c
index 3a6e7d71faff..e26a51695c61 100644
--- a/tools/perf/tests/mmap-thread-lookup.c
+++ b/tools/perf/tests/mmap-thread-lookup.c
@@ -224,7 +224,7 @@ static int mmap_events(synth_cb synth)
*
* by using all thread objects.
*/
-static int test__mmap_thread_lookup(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__mmap_thread_lookup(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
/* perf_event__synthesize_threads synthesize */
TEST_ASSERT_VAL("failed with sythesizing all",
diff --git a/tools/perf/tests/openat-syscall-all-cpus.c b/tools/perf/tests/openat-syscall-all-cpus.c
index 28f3597ba531..cd3dd463783f 100644
--- a/tools/perf/tests/openat-syscall-all-cpus.c
+++ b/tools/perf/tests/openat-syscall-all-cpus.c
@@ -19,7 +19,7 @@
#include "stat.h"
#include "util/counts.h"
-static int test__openat_syscall_event_on_all_cpus(struct test *test __maybe_unused,
+static int test__openat_syscall_event_on_all_cpus(struct test_suite *test __maybe_unused,
int subtest __maybe_unused)
{
int err = -1, fd, cpu;
diff --git a/tools/perf/tests/openat-syscall-tp-fields.c b/tools/perf/tests/openat-syscall-tp-fields.c
index 0f9c497f95d7..db030f44099c 100644
--- a/tools/perf/tests/openat-syscall-tp-fields.c
+++ b/tools/perf/tests/openat-syscall-tp-fields.c
@@ -22,7 +22,7 @@
#define AT_FDCWD -100
#endif
-static int test__syscall_openat_tp_fields(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__syscall_openat_tp_fields(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
struct record_opts opts = {
.target = {
diff --git a/tools/perf/tests/openat-syscall.c b/tools/perf/tests/openat-syscall.c
index 8f904fcebe6f..7f4c13c4b14d 100644
--- a/tools/perf/tests/openat-syscall.c
+++ b/tools/perf/tests/openat-syscall.c
@@ -13,7 +13,7 @@
#include "tests.h"
#include "util/counts.h"
-static int test__openat_syscall_event(struct test *test __maybe_unused,
+static int test__openat_syscall_event(struct test_suite *test __maybe_unused,
int subtest __maybe_unused)
{
int err = -1, fd;
diff --git a/tools/perf/tests/parse-events.c b/tools/perf/tests/parse-events.c
index a0df5b4f45fd..292547092638 100644
--- a/tools/perf/tests/parse-events.c
+++ b/tools/perf/tests/parse-events.c
@@ -2276,7 +2276,7 @@ static int test_pmu_events_alias(char *event, char *alias)
return test_event(&e);
}
-static int test__parse_events(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__parse_events(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
int ret1, ret2 = 0;
char *event, *alias;
diff --git a/tools/perf/tests/parse-metric.c b/tools/perf/tests/parse-metric.c
index 86568cb937a9..fbbaae4a57be 100644
--- a/tools/perf/tests/parse-metric.c
+++ b/tools/perf/tests/parse-metric.c
@@ -369,7 +369,7 @@ static int test_metric_group(void)
return 0;
}
-static int test__parse_metric(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__parse_metric(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
TEST_ASSERT_VAL("IPC failed", test_ipc() == 0);
TEST_ASSERT_VAL("frontend failed", test_frontend() == 0);
diff --git a/tools/perf/tests/parse-no-sample-id-all.c b/tools/perf/tests/parse-no-sample-id-all.c
index 38804fcc1a7e..d51848bdff46 100644
--- a/tools/perf/tests/parse-no-sample-id-all.c
+++ b/tools/perf/tests/parse-no-sample-id-all.c
@@ -67,7 +67,7 @@ struct test_attr_event {
*
* Return: %0 on success, %-1 if the test fails.
*/
-static int test__parse_no_sample_id_all(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__parse_no_sample_id_all(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
int err;
diff --git a/tools/perf/tests/pe-file-parsing.c b/tools/perf/tests/pe-file-parsing.c
index 8d4fec99459a..c09a9fae1689 100644
--- a/tools/perf/tests/pe-file-parsing.c
+++ b/tools/perf/tests/pe-file-parsing.c
@@ -68,7 +68,7 @@ static int run_dir(const char *d)
return TEST_OK;
}
-static int test__pe_file_parsing(struct test *test __maybe_unused,
+static int test__pe_file_parsing(struct test_suite *test __maybe_unused,
int subtest __maybe_unused)
{
struct stat st;
@@ -89,7 +89,7 @@ static int test__pe_file_parsing(struct test *test __maybe_unused,
#else
-static int test__pe_file_parsing(struct test *test __maybe_unused,
+static int test__pe_file_parsing(struct test_suite *test __maybe_unused,
int subtest __maybe_unused)
{
return TEST_SKIP;
diff --git a/tools/perf/tests/perf-hooks.c b/tools/perf/tests/perf-hooks.c
index 61cb1d0a6eb9..78cdeb89645e 100644
--- a/tools/perf/tests/perf-hooks.c
+++ b/tools/perf/tests/perf-hooks.c
@@ -26,7 +26,7 @@ static void the_hook(void *_hook_flags)
raise(SIGSEGV);
}
-static int test__perf_hooks(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__perf_hooks(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
int hook_flags = 0;
diff --git a/tools/perf/tests/perf-record.c b/tools/perf/tests/perf-record.c
index 24faa8487d8c..6354465067b8 100644
--- a/tools/perf/tests/perf-record.c
+++ b/tools/perf/tests/perf-record.c
@@ -41,7 +41,7 @@ static int sched__get_first_possible_cpu(pid_t pid, cpu_set_t *maskp)
return cpu;
}
-static int test__PERF_RECORD(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__PERF_RECORD(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
struct record_opts opts = {
.target = {
diff --git a/tools/perf/tests/perf-time-to-tsc.c b/tools/perf/tests/perf-time-to-tsc.c
index dc2dcad7371f..d23740f80c7d 100644
--- a/tools/perf/tests/perf-time-to-tsc.c
+++ b/tools/perf/tests/perf-time-to-tsc.c
@@ -45,7 +45,7 @@
* %0 is returned, otherwise %-1 is returned. If TSC conversion is not
* supported then then the test passes but " (not supported)" is printed.
*/
-static int test__perf_time_to_tsc(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__perf_time_to_tsc(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
struct record_opts opts = {
.mmap_pages = UINT_MAX,
@@ -198,7 +198,7 @@ static bool test__tsc_is_supported(void)
#endif
}
-struct test suite__perf_time_to_tsc = {
+struct test_suite suite__perf_time_to_tsc = {
.desc = "Convert perf time to TSC",
.func = test__perf_time_to_tsc,
.is_supported = test__tsc_is_supported,
diff --git a/tools/perf/tests/pfm.c b/tools/perf/tests/pfm.c
index 83dc9742813a..f55e4ecdda71 100644
--- a/tools/perf/tests/pfm.c
+++ b/tools/perf/tests/pfm.c
@@ -201,7 +201,7 @@ static int test__pfm_subtest_get_nr(void)
return (int)ARRAY_SIZE(pfm_testcase_table);
}
-static int test__pfm(struct test *test __maybe_unused, int i __maybe_unused)
+static int test__pfm(struct test_suite *test __maybe_unused, int i __maybe_unused)
{
#ifdef HAVE_LIBPFM
if (i < 0 || i >= (int)ARRAY_SIZE(pfm_testcase_table))
@@ -212,7 +212,7 @@ static int test__pfm(struct test *test __maybe_unused, int i __maybe_unused)
#endif
}
-struct test suite__pfm = {
+struct test_suite suite__pfm = {
.desc = "Test libpfm4 support",
.func = test__pfm,
.subtest = {
diff --git a/tools/perf/tests/pmu-events.c b/tools/perf/tests/pmu-events.c
index b95b3642636c..de5ed4aa41b0 100644
--- a/tools/perf/tests/pmu-events.c
+++ b/tools/perf/tests/pmu-events.c
@@ -1041,7 +1041,7 @@ static int test__pmu_events_subtest_get_nr(void)
return (int)ARRAY_SIZE(pmu_events_testcase_table);
}
-static int test__pmu_events(struct test *test __maybe_unused, int subtest)
+static int test__pmu_events(struct test_suite *test __maybe_unused, int subtest)
{
if (subtest < 0 ||
subtest >= (int)ARRAY_SIZE(pmu_events_testcase_table))
@@ -1049,7 +1049,7 @@ static int test__pmu_events(struct test *test __maybe_unused, int subtest)
return pmu_events_testcase_table[subtest].func();
}
-struct test suite__pmu_events = {
+struct test_suite suite__pmu_events = {
.desc = "PMU events",
.func = test__pmu_events,
.subtest = {
diff --git a/tools/perf/tests/pmu.c b/tools/perf/tests/pmu.c
index 9a58dad67b27..8507bd615e97 100644
--- a/tools/perf/tests/pmu.c
+++ b/tools/perf/tests/pmu.c
@@ -137,7 +137,7 @@ static struct list_head *test_terms_list(void)
return &terms;
}
-static int test__pmu(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__pmu(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
char *format = test_format_dir_get();
LIST_HEAD(formats);
diff --git a/tools/perf/tests/python-use.c b/tools/perf/tests/python-use.c
index b667140688be..6b990ee38575 100644
--- a/tools/perf/tests/python-use.c
+++ b/tools/perf/tests/python-use.c
@@ -9,7 +9,7 @@
#include "tests.h"
#include "util/debug.h"
-static int test__python_use(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__python_use(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
char *cmd;
int ret;
diff --git a/tools/perf/tests/sample-parsing.c b/tools/perf/tests/sample-parsing.c
index 667518df58a3..6df176a4ce21 100644
--- a/tools/perf/tests/sample-parsing.c
+++ b/tools/perf/tests/sample-parsing.c
@@ -335,7 +335,7 @@ static int do_test(u64 sample_type, u64 sample_regs, u64 read_format)
* checks sample format bits separately and together. If the test passes %0 is
* returned, otherwise %-1 is returned.
*/
-static int test__sample_parsing(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__sample_parsing(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
const u64 rf[] = {4, 5, 6, 7, 12, 13, 14, 15};
u64 sample_type;
diff --git a/tools/perf/tests/sdt.c b/tools/perf/tests/sdt.c
index 307615f1b6a7..919712899251 100644
--- a/tools/perf/tests/sdt.c
+++ b/tools/perf/tests/sdt.c
@@ -76,7 +76,7 @@ static int search_cached_probe(const char *target,
return ret;
}
-static int test__sdt_event(struct test *test __maybe_unused, int subtests __maybe_unused)
+static int test__sdt_event(struct test_suite *test __maybe_unused, int subtests __maybe_unused)
{
int ret = TEST_FAIL;
char __tempdir[] = "./test-buildid-XXXXXX";
@@ -114,7 +114,7 @@ static int test__sdt_event(struct test *test __maybe_unused, int subtests __mayb
return ret;
}
#else
-static int test__sdt_event(struct test *test __maybe_unused, int subtests __maybe_unused)
+static int test__sdt_event(struct test_suite *test __maybe_unused, int subtests __maybe_unused)
{
pr_debug("Skip SDT event test because SDT support is not compiled\n");
return TEST_SKIP;
diff --git a/tools/perf/tests/stat.c b/tools/perf/tests/stat.c
index cd119c48f1e5..4a3b16dcaa1e 100644
--- a/tools/perf/tests/stat.c
+++ b/tools/perf/tests/stat.c
@@ -47,7 +47,7 @@ static int process_stat_config_event(struct perf_tool *tool __maybe_unused,
return 0;
}
-static int test__synthesize_stat_config(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__synthesize_stat_config(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
struct perf_stat_config stat_config = {
.aggr_mode = AGGR_CORE,
@@ -77,7 +77,7 @@ static int process_stat_event(struct perf_tool *tool __maybe_unused,
return 0;
}
-static int test__synthesize_stat(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__synthesize_stat(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
struct perf_counts_values count;
@@ -103,7 +103,7 @@ static int process_stat_round_event(struct perf_tool *tool __maybe_unused,
return 0;
}
-static int test__synthesize_stat_round(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__synthesize_stat_round(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
TEST_ASSERT_VAL("failed to synthesize stat_config",
!perf_event__synthesize_stat_round(NULL, 0xdeadbeef, PERF_STAT_ROUND_TYPE__INTERVAL,
diff --git a/tools/perf/tests/sw-clock.c b/tools/perf/tests/sw-clock.c
index db1e339a0fbe..9cd6fec375ee 100644
--- a/tools/perf/tests/sw-clock.c
+++ b/tools/perf/tests/sw-clock.c
@@ -133,7 +133,7 @@ static int __test__sw_clock_freq(enum perf_sw_ids clock_id)
return err;
}
-static int test__sw_clock_freq(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__sw_clock_freq(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
int ret;
diff --git a/tools/perf/tests/switch-tracking.c b/tools/perf/tests/switch-tracking.c
index 9b379aaddce4..0c0c2328bf4e 100644
--- a/tools/perf/tests/switch-tracking.c
+++ b/tools/perf/tests/switch-tracking.c
@@ -321,7 +321,7 @@ static int process_events(struct evlist *evlist,
* evsel->core.system_wide and evsel->tracking flags (respectively) with other events
* sometimes enabled or disabled.
*/
-static int test__switch_tracking(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__switch_tracking(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
const char *sched_switch = "sched:sched_switch";
struct switch_tracking switch_tracking = { .tids = NULL, };
diff --git a/tools/perf/tests/task-exit.c b/tools/perf/tests/task-exit.c
index 197574230493..25f075fa9125 100644
--- a/tools/perf/tests/task-exit.c
+++ b/tools/perf/tests/task-exit.c
@@ -39,7 +39,7 @@ static void workload_exec_failed_signal(int signo __maybe_unused,
* if the number of exit event reported by the kernel is 1 or not
* in order to check the kernel returns correct number of event.
*/
-static int test__task_exit(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__task_exit(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
int err = -1;
union perf_event *event;
diff --git a/tools/perf/tests/tests.h b/tools/perf/tests/tests.h
index f2e1c242fb1f..4e8f1686f213 100644
--- a/tools/perf/tests/tests.h
+++ b/tools/perf/tests/tests.h
@@ -27,9 +27,9 @@ enum {
TEST_SKIP = -2,
};
-struct test {
+struct test_suite {
const char *desc;
- int (*func)(struct test *test, int subtest);
+ int (*func)(struct test_suite *test, int subtest);
struct {
bool skip_if_fail;
int (*get_nr)(void);
@@ -41,10 +41,10 @@ struct test {
};
#define DECLARE_SUITE(name) \
- extern struct test suite__##name;
+ extern struct test_suite suite__##name;
#define DEFINE_SUITE(description, name) \
- struct test suite__##name = { \
+ struct test_suite suite__##name = { \
.desc = description, \
.func = test__##name, \
};
@@ -124,7 +124,7 @@ DECLARE_SUITE(expand_cgroup_events);
DECLARE_SUITE(perf_time_to_tsc);
DECLARE_SUITE(dlfilter);
-int test__dwarf_unwind(struct test *test, int subtest);
+int test__dwarf_unwind(struct test_suite *test, int subtest);
bool test__bp_signal_is_supported(void);
#ifdef HAVE_DWARF_UNWIND_SUPPORT
diff --git a/tools/perf/tests/thread-map.c b/tools/perf/tests/thread-map.c
index 7e2e8a72fa78..e413c1387fcb 100644
--- a/tools/perf/tests/thread-map.c
+++ b/tools/perf/tests/thread-map.c
@@ -19,7 +19,7 @@ struct machine;
#define NAME (const char *) "perf"
#define NAMEUL (unsigned long) NAME
-static int test__thread_map(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__thread_map(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
struct perf_thread_map *map;
@@ -86,7 +86,7 @@ static int process_event(struct perf_tool *tool __maybe_unused,
return 0;
}
-static int test__thread_map_synthesize(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__thread_map_synthesize(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
struct perf_thread_map *threads;
@@ -106,7 +106,7 @@ static int test__thread_map_synthesize(struct test *test __maybe_unused, int sub
return 0;
}
-static int test__thread_map_remove(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__thread_map_remove(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
struct perf_thread_map *threads;
char *str;
diff --git a/tools/perf/tests/thread-maps-share.c b/tools/perf/tests/thread-maps-share.c
index 2821be0a9a05..84edd82c519e 100644
--- a/tools/perf/tests/thread-maps-share.c
+++ b/tools/perf/tests/thread-maps-share.c
@@ -4,7 +4,7 @@
#include "thread.h"
#include "debug.h"
-static int test__thread_maps_share(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__thread_maps_share(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
struct machines machines;
struct machine *machine;
diff --git a/tools/perf/tests/time-utils-test.c b/tools/perf/tests/time-utils-test.c
index 538100cb7541..38df10373c1e 100644
--- a/tools/perf/tests/time-utils-test.c
+++ b/tools/perf/tests/time-utils-test.c
@@ -131,7 +131,7 @@ static bool test__perf_time__parse_for_ranges(struct test_data *d)
return pass;
}
-static int test__time_utils(struct test *t __maybe_unused, int subtest __maybe_unused)
+static int test__time_utils(struct test_suite *t __maybe_unused, int subtest __maybe_unused)
{
bool pass = true;
diff --git a/tools/perf/tests/topology.c b/tools/perf/tests/topology.c
index 05fda3955f95..f998c10ca124 100644
--- a/tools/perf/tests/topology.c
+++ b/tools/perf/tests/topology.c
@@ -173,7 +173,7 @@ static int check_cpu_topology(char *path, struct perf_cpu_map *map)
return 0;
}
-static int test__session_topology(struct test *test __maybe_unused, int subtest __maybe_unused)
+static int test__session_topology(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
{
char path[PATH_MAX];
struct perf_cpu_map *map;
diff --git a/tools/perf/tests/unit_number__scnprintf.c b/tools/perf/tests/unit_number__scnprintf.c
index 2ad78a9473d4..88bcada1c78f 100644
--- a/tools/perf/tests/unit_number__scnprintf.c
+++ b/tools/perf/tests/unit_number__scnprintf.c
@@ -7,7 +7,7 @@
#include "units.h"
#include "debug.h"
-static int test__unit_number__scnprint(struct test *t __maybe_unused, int subtest __maybe_unused)
+static int test__unit_number__scnprint(struct test_suite *t __maybe_unused, int subtest __maybe_unused)
{
struct {
u64 n;
diff --git a/tools/perf/tests/vmlinux-kallsyms.c b/tools/perf/tests/vmlinux-kallsyms.c
index 3b2d4256bad3..f1333b6f651e 100644
--- a/tools/perf/tests/vmlinux-kallsyms.c
+++ b/tools/perf/tests/vmlinux-kallsyms.c
@@ -14,7 +14,7 @@
#define UM(x) kallsyms_map->unmap_ip(kallsyms_map, (x))
-static int test__vmlinux_matches_kallsyms(struct test *test __maybe_unused,
+static int test__vmlinux_matches_kallsyms(struct test_suite *test __maybe_unused,
int subtest __maybe_unused)
{
int err = -1;
diff --git a/tools/perf/tests/wp.c b/tools/perf/tests/wp.c
index 16ab733cabce..904bdf2dcf81 100644
--- a/tools/perf/tests/wp.c
+++ b/tools/perf/tests/wp.c
@@ -230,7 +230,7 @@ static const char *test__wp_subtest_skip_reason(int i)
return wp_testcase_table[i].skip_msg();
}
-static int test__wp(struct test *test __maybe_unused, int i)
+static int test__wp(struct test_suite *test __maybe_unused, int i)
{
if (i < 0 || i >= (int)ARRAY_SIZE(wp_testcase_table))
return TEST_FAIL;
@@ -254,7 +254,7 @@ static bool test__wp_is_supported(void)
#endif
}
-struct test suite__wp = {
+struct test_suite suite__wp = {
.desc = "Watchpoint",
.func = test__wp,
.is_supported = test__wp_is_supported,
--
2.33.0.464.g1972c5931b-goog
^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [RFC PATCH 0/5] Start aligning perf test with kunit style
2021-09-22 8:19 [RFC PATCH 0/5] Start aligning perf test with kunit style Ian Rogers
` (4 preceding siblings ...)
2021-09-22 8:19 ` [RFC PATCH 5/5] perf test: Rename struct test to test_suite Ian Rogers
@ 2021-09-22 21:55 ` Jiri Olsa
2021-09-22 23:32 ` Daniel Latypov
2021-09-22 23:36 ` Ian Rogers
5 siblings, 2 replies; 16+ messages in thread
From: Jiri Olsa @ 2021-09-22 21:55 UTC (permalink / raw)
To: Ian Rogers
Cc: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Mark Rutland, Alexander Shishkin, Namhyung Kim, Jin Yao,
John Garry, Paul A . Clarke, linux-perf-users, linux-kernel,
Brendan Higgins, Daniel Latypov, David Gow, eranian
On Wed, Sep 22, 2021 at 01:19:53AM -0700, Ian Rogers wrote:
> Perf test uses its own structs and code layout that differs from kunit
> that was more recently introduced to the kernel. Besides consistency,
> it is hoped that moving in the direction of kunit style will enable
> reuse of infrastructure like test output formatting for continuous
> testing systems. For example:
> https://lore.kernel.org/linux-kselftest/CA+GJov6tdjvY9x12JsJT14qn6c7NViJxqaJk+r-K1YJzPggFDQ@mail.gmail.com/
>
> The motivation for this restructuring comes from wanting to be able to
> tag tests with a size:
> https://lore.kernel.org/linux-perf-users/CAP-5=fWmGyuqFKc-EMP3rbmTkjZ3MS+YSajGZfeRMc38HS82gw@mail.gmail.com/
> To have more exhaustive and slower running tests. This isn't
> something kunit currently supports, nor is the execution of python and
> shell tests, but it seems sensible to work on an approach with kunit
> rather to invent a new wheel inside of perf.
>
> These initial patches are just refactoring the main test suite
> definitions to be in a more kunit style. Kunit isn't depended upon, it
> is hoped that this can be done in later patches for the sake of
> consistency.
seems good.. how far away from kunit is the code now?
>
> v1. Built/tested on x86.
>
> Ian Rogers (5):
> perf test: Use macro for "suite" declarations
> perf test: Use macro for "suite" definitions
> perf test: Make each test/suite its own struct.
> perf test: Move each test suite struct to its test
> perf test: Rename struct test to test_suite
>
> tools/perf/arch/arm/include/arch-tests.h | 2 +-
> tools/perf/arch/arm/tests/arch-tests.c | 21 +-
> tools/perf/arch/arm/tests/vectors-page.c | 2 +-
> tools/perf/arch/arm64/include/arch-tests.h | 2 +-
> tools/perf/arch/arm64/tests/arch-tests.c | 15 +-
> tools/perf/arch/powerpc/include/arch-tests.h | 2 +-
> tools/perf/arch/powerpc/tests/arch-tests.c | 15 +-
I can run/test this on ppc/arm if you don't have any
jirka
> tools/perf/arch/x86/include/arch-tests.h | 14 +-
> tools/perf/arch/x86/tests/arch-tests.c | 47 +-
> tools/perf/arch/x86/tests/bp-modify.c | 2 +-
> tools/perf/arch/x86/tests/insn-x86.c | 2 +-
> tools/perf/arch/x86/tests/intel-cqm.c | 2 +-
> .../x86/tests/intel-pt-pkt-decoder-test.c | 2 +-
> tools/perf/arch/x86/tests/rdpmc.c | 2 +-
> tools/perf/arch/x86/tests/sample-parsing.c | 2 +-
> tools/perf/tests/api-io.c | 6 +-
> tools/perf/tests/attr.c | 4 +-
> tools/perf/tests/backward-ring-buffer.c | 4 +-
> tools/perf/tests/bitmap.c | 4 +-
> tools/perf/tests/bp_account.c | 10 +-
> tools/perf/tests/bp_signal.c | 8 +-
> tools/perf/tests/bp_signal_overflow.c | 8 +-
> tools/perf/tests/bpf.c | 22 +-
> tools/perf/tests/builtin-test.c | 441 ++++--------------
> tools/perf/tests/clang.c | 18 +-
> tools/perf/tests/code-reading.c | 4 +-
> tools/perf/tests/cpumap.c | 10 +-
> tools/perf/tests/demangle-java-test.c | 4 +-
> tools/perf/tests/demangle-ocaml-test.c | 4 +-
> tools/perf/tests/dlfilter-test.c | 4 +-
> tools/perf/tests/dso-data.c | 10 +-
> tools/perf/tests/dwarf-unwind.c | 2 +-
> tools/perf/tests/event-times.c | 4 +-
> tools/perf/tests/event_update.c | 4 +-
> tools/perf/tests/evsel-roundtrip-name.c | 4 +-
> tools/perf/tests/evsel-tp-sched.c | 4 +-
> tools/perf/tests/expand-cgroup.c | 6 +-
> tools/perf/tests/expr.c | 4 +-
> tools/perf/tests/fdarray.c | 7 +-
> tools/perf/tests/genelf.c | 6 +-
> tools/perf/tests/hists_cumulate.c | 4 +-
> tools/perf/tests/hists_filter.c | 4 +-
> tools/perf/tests/hists_link.c | 4 +-
> tools/perf/tests/hists_output.c | 4 +-
> tools/perf/tests/is_printable_array.c | 4 +-
> tools/perf/tests/keep-tracking.c | 4 +-
> tools/perf/tests/kmod-path.c | 4 +-
> tools/perf/tests/llvm.c | 22 +-
> tools/perf/tests/maps.c | 4 +-
> tools/perf/tests/mem.c | 4 +-
> tools/perf/tests/mem2node.c | 4 +-
> tools/perf/tests/mmap-basic.c | 4 +-
> tools/perf/tests/mmap-thread-lookup.c | 4 +-
> tools/perf/tests/openat-syscall-all-cpus.c | 5 +-
> tools/perf/tests/openat-syscall-tp-fields.c | 4 +-
> tools/perf/tests/openat-syscall.c | 5 +-
> tools/perf/tests/parse-events.c | 4 +-
> tools/perf/tests/parse-metric.c | 4 +-
> tools/perf/tests/parse-no-sample-id-all.c | 4 +-
> tools/perf/tests/pe-file-parsing.c | 6 +-
> tools/perf/tests/perf-hooks.c | 4 +-
> tools/perf/tests/perf-record.c | 4 +-
> tools/perf/tests/perf-time-to-tsc.c | 10 +-
> tools/perf/tests/pfm.c | 16 +-
> tools/perf/tests/pmu-events.c | 19 +-
> tools/perf/tests/pmu.c | 4 +-
> tools/perf/tests/python-use.c | 4 +-
> tools/perf/tests/sample-parsing.c | 4 +-
> tools/perf/tests/sdt.c | 6 +-
> tools/perf/tests/stat.c | 10 +-
> tools/perf/tests/sw-clock.c | 4 +-
> tools/perf/tests/switch-tracking.c | 4 +-
> tools/perf/tests/task-exit.c | 4 +-
> tools/perf/tests/tests.h | 179 ++++---
> tools/perf/tests/thread-map.c | 10 +-
> tools/perf/tests/thread-maps-share.c | 4 +-
> tools/perf/tests/time-utils-test.c | 4 +-
> tools/perf/tests/topology.c | 4 +-
> tools/perf/tests/unit_number__scnprintf.c | 4 +-
> tools/perf/tests/vmlinux-kallsyms.c | 5 +-
> tools/perf/tests/wp.c | 22 +-
> 81 files changed, 543 insertions(+), 618 deletions(-)
>
> --
> 2.33.0.464.g1972c5931b-goog
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [RFC PATCH 0/5] Start aligning perf test with kunit style
2021-09-22 21:55 ` [RFC PATCH 0/5] Start aligning perf test with kunit style Jiri Olsa
@ 2021-09-22 23:32 ` Daniel Latypov
2021-09-22 23:36 ` Ian Rogers
1 sibling, 0 replies; 16+ messages in thread
From: Daniel Latypov @ 2021-09-22 23:32 UTC (permalink / raw)
To: Jiri Olsa
Cc: Ian Rogers, Peter Zijlstra, Ingo Molnar,
Arnaldo Carvalho de Melo, Mark Rutland, Alexander Shishkin,
Namhyung Kim, Jin Yao, John Garry, Paul A . Clarke,
linux-perf-users, linux-kernel, Brendan Higgins, David Gow,
eranian
On Wed, Sep 22, 2021 at 2:55 PM Jiri Olsa <jolsa@redhat.com> wrote:
>
> On Wed, Sep 22, 2021 at 01:19:53AM -0700, Ian Rogers wrote:
> > Perf test uses its own structs and code layout that differs from kunit
> > that was more recently introduced to the kernel. Besides consistency,
> > it is hoped that moving in the direction of kunit style will enable
> > reuse of infrastructure like test output formatting for continuous
> > testing systems. For example:
> > https://lore.kernel.org/linux-kselftest/CA+GJov6tdjvY9x12JsJT14qn6c7NViJxqaJk+r-K1YJzPggFDQ@mail.gmail.com/
> >
> > The motivation for this restructuring comes from wanting to be able to
> > tag tests with a size:
> > https://lore.kernel.org/linux-perf-users/CAP-5=fWmGyuqFKc-EMP3rbmTkjZ3MS+YSajGZfeRMc38HS82gw@mail.gmail.com/
> > To have more exhaustive and slower running tests. This isn't
> > something kunit currently supports, nor is the execution of python and
> > shell tests, but it seems sensible to work on an approach with kunit
> > rather to invent a new wheel inside of perf.
> >
> > These initial patches are just refactoring the main test suite
> > definitions to be in a more kunit style. Kunit isn't depended upon, it
> > is hoped that this can be done in later patches for the sake of
> > consistency.
>
> seems good.. how far away from kunit is the code now?
For context, here's what an example kunit test looks like:
https://elixir.bootlin.com/linux/latest/source/lib/kunit/kunit-example-test.c
So having the hierarchy of test_suite => list of tests is a big step
towards that.
A brief skim suggests we still have test funcs like `__test_bpf(int
idx)`, whereas normally KUnit has each test case as its own function.
In the case of bpf.c, it has a test table, so it'd probably use
https://www.kernel.org/doc/html/latest/dev-tools/kunit/usage.html#parameterized-testing
So overall there would probably be a pretty big delta if/when moving
to KUnit, but it should be quite a bit easier after these patches.
>
> >
> > v1. Built/tested on x86.
> >
> > Ian Rogers (5):
> > perf test: Use macro for "suite" declarations
> > perf test: Use macro for "suite" definitions
> > perf test: Make each test/suite its own struct.
> > perf test: Move each test suite struct to its test
> > perf test: Rename struct test to test_suite
> >
> > tools/perf/arch/arm/include/arch-tests.h | 2 +-
> > tools/perf/arch/arm/tests/arch-tests.c | 21 +-
> > tools/perf/arch/arm/tests/vectors-page.c | 2 +-
> > tools/perf/arch/arm64/include/arch-tests.h | 2 +-
> > tools/perf/arch/arm64/tests/arch-tests.c | 15 +-
> > tools/perf/arch/powerpc/include/arch-tests.h | 2 +-
> > tools/perf/arch/powerpc/tests/arch-tests.c | 15 +-
>
> I can run/test this on ppc/arm if you don't have any
>
> jirka
>
> > tools/perf/arch/x86/include/arch-tests.h | 14 +-
> > tools/perf/arch/x86/tests/arch-tests.c | 47 +-
> > tools/perf/arch/x86/tests/bp-modify.c | 2 +-
> > tools/perf/arch/x86/tests/insn-x86.c | 2 +-
> > tools/perf/arch/x86/tests/intel-cqm.c | 2 +-
> > .../x86/tests/intel-pt-pkt-decoder-test.c | 2 +-
> > tools/perf/arch/x86/tests/rdpmc.c | 2 +-
> > tools/perf/arch/x86/tests/sample-parsing.c | 2 +-
> > tools/perf/tests/api-io.c | 6 +-
> > tools/perf/tests/attr.c | 4 +-
> > tools/perf/tests/backward-ring-buffer.c | 4 +-
> > tools/perf/tests/bitmap.c | 4 +-
> > tools/perf/tests/bp_account.c | 10 +-
> > tools/perf/tests/bp_signal.c | 8 +-
> > tools/perf/tests/bp_signal_overflow.c | 8 +-
> > tools/perf/tests/bpf.c | 22 +-
> > tools/perf/tests/builtin-test.c | 441 ++++--------------
> > tools/perf/tests/clang.c | 18 +-
> > tools/perf/tests/code-reading.c | 4 +-
> > tools/perf/tests/cpumap.c | 10 +-
> > tools/perf/tests/demangle-java-test.c | 4 +-
> > tools/perf/tests/demangle-ocaml-test.c | 4 +-
> > tools/perf/tests/dlfilter-test.c | 4 +-
> > tools/perf/tests/dso-data.c | 10 +-
> > tools/perf/tests/dwarf-unwind.c | 2 +-
> > tools/perf/tests/event-times.c | 4 +-
> > tools/perf/tests/event_update.c | 4 +-
> > tools/perf/tests/evsel-roundtrip-name.c | 4 +-
> > tools/perf/tests/evsel-tp-sched.c | 4 +-
> > tools/perf/tests/expand-cgroup.c | 6 +-
> > tools/perf/tests/expr.c | 4 +-
> > tools/perf/tests/fdarray.c | 7 +-
> > tools/perf/tests/genelf.c | 6 +-
> > tools/perf/tests/hists_cumulate.c | 4 +-
> > tools/perf/tests/hists_filter.c | 4 +-
> > tools/perf/tests/hists_link.c | 4 +-
> > tools/perf/tests/hists_output.c | 4 +-
> > tools/perf/tests/is_printable_array.c | 4 +-
> > tools/perf/tests/keep-tracking.c | 4 +-
> > tools/perf/tests/kmod-path.c | 4 +-
> > tools/perf/tests/llvm.c | 22 +-
> > tools/perf/tests/maps.c | 4 +-
> > tools/perf/tests/mem.c | 4 +-
> > tools/perf/tests/mem2node.c | 4 +-
> > tools/perf/tests/mmap-basic.c | 4 +-
> > tools/perf/tests/mmap-thread-lookup.c | 4 +-
> > tools/perf/tests/openat-syscall-all-cpus.c | 5 +-
> > tools/perf/tests/openat-syscall-tp-fields.c | 4 +-
> > tools/perf/tests/openat-syscall.c | 5 +-
> > tools/perf/tests/parse-events.c | 4 +-
> > tools/perf/tests/parse-metric.c | 4 +-
> > tools/perf/tests/parse-no-sample-id-all.c | 4 +-
> > tools/perf/tests/pe-file-parsing.c | 6 +-
> > tools/perf/tests/perf-hooks.c | 4 +-
> > tools/perf/tests/perf-record.c | 4 +-
> > tools/perf/tests/perf-time-to-tsc.c | 10 +-
> > tools/perf/tests/pfm.c | 16 +-
> > tools/perf/tests/pmu-events.c | 19 +-
> > tools/perf/tests/pmu.c | 4 +-
> > tools/perf/tests/python-use.c | 4 +-
> > tools/perf/tests/sample-parsing.c | 4 +-
> > tools/perf/tests/sdt.c | 6 +-
> > tools/perf/tests/stat.c | 10 +-
> > tools/perf/tests/sw-clock.c | 4 +-
> > tools/perf/tests/switch-tracking.c | 4 +-
> > tools/perf/tests/task-exit.c | 4 +-
> > tools/perf/tests/tests.h | 179 ++++---
> > tools/perf/tests/thread-map.c | 10 +-
> > tools/perf/tests/thread-maps-share.c | 4 +-
> > tools/perf/tests/time-utils-test.c | 4 +-
> > tools/perf/tests/topology.c | 4 +-
> > tools/perf/tests/unit_number__scnprintf.c | 4 +-
> > tools/perf/tests/vmlinux-kallsyms.c | 5 +-
> > tools/perf/tests/wp.c | 22 +-
> > 81 files changed, 543 insertions(+), 618 deletions(-)
> >
> > --
> > 2.33.0.464.g1972c5931b-goog
> >
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [RFC PATCH 0/5] Start aligning perf test with kunit style
2021-09-22 21:55 ` [RFC PATCH 0/5] Start aligning perf test with kunit style Jiri Olsa
2021-09-22 23:32 ` Daniel Latypov
@ 2021-09-22 23:36 ` Ian Rogers
2021-09-26 21:25 ` Jiri Olsa
1 sibling, 1 reply; 16+ messages in thread
From: Ian Rogers @ 2021-09-22 23:36 UTC (permalink / raw)
To: Jiri Olsa
Cc: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Mark Rutland, Alexander Shishkin, Namhyung Kim, Jin Yao,
John Garry, Paul A . Clarke, linux-perf-users, linux-kernel,
Brendan Higgins, Daniel Latypov, David Gow, eranian
On Wed, Sep 22, 2021 at 2:55 PM Jiri Olsa <jolsa@redhat.com> wrote:
>
> On Wed, Sep 22, 2021 at 01:19:53AM -0700, Ian Rogers wrote:
> > Perf test uses its own structs and code layout that differs from kunit
> > that was more recently introduced to the kernel. Besides consistency,
> > it is hoped that moving in the direction of kunit style will enable
> > reuse of infrastructure like test output formatting for continuous
> > testing systems. For example:
> > https://lore.kernel.org/linux-kselftest/CA+GJov6tdjvY9x12JsJT14qn6c7NViJxqaJk+r-K1YJzPggFDQ@mail.gmail.com/
> >
> > The motivation for this restructuring comes from wanting to be able to
> > tag tests with a size:
> > https://lore.kernel.org/linux-perf-users/CAP-5=fWmGyuqFKc-EMP3rbmTkjZ3MS+YSajGZfeRMc38HS82gw@mail.gmail.com/
> > To have more exhaustive and slower running tests. This isn't
> > something kunit currently supports, nor is the execution of python and
> > shell tests, but it seems sensible to work on an approach with kunit
> > rather to invent a new wheel inside of perf.
> >
> > These initial patches are just refactoring the main test suite
> > definitions to be in a more kunit style. Kunit isn't depended upon, it
> > is hoped that this can be done in later patches for the sake of
> > consistency.
>
> seems good.. how far away from kunit is the code now?
Thanks Jiri, It is a ways away from complete. I was thinking to follow up with:
* Migrate the current sub-test approach to use kunit style test cases
within a suite.
* Combine what are currently independent test suites into one test
suite with different test cases, for example stat.c contains stat,
stat_config and stat_round tests.
Once this is done then to unify with kunit we need to work out a
common pattern for skipping a test, etc. There's already a lot here
and so I wanted to get an opinion before pushing along further.
> >
> > v1. Built/tested on x86.
> >
> > Ian Rogers (5):
> > perf test: Use macro for "suite" declarations
> > perf test: Use macro for "suite" definitions
> > perf test: Make each test/suite its own struct.
> > perf test: Move each test suite struct to its test
> > perf test: Rename struct test to test_suite
> >
> > tools/perf/arch/arm/include/arch-tests.h | 2 +-
> > tools/perf/arch/arm/tests/arch-tests.c | 21 +-
> > tools/perf/arch/arm/tests/vectors-page.c | 2 +-
> > tools/perf/arch/arm64/include/arch-tests.h | 2 +-
> > tools/perf/arch/arm64/tests/arch-tests.c | 15 +-
> > tools/perf/arch/powerpc/include/arch-tests.h | 2 +-
> > tools/perf/arch/powerpc/tests/arch-tests.c | 15 +-
>
> I can run/test this on ppc/arm if you don't have any
I have pretty easy access to ARM but lost access to PowerPC. If we're
happy with the direction then I can test ARM and ask for help on
PowerPC.
Thanks,
Ian
> jirka
>
> > tools/perf/arch/x86/include/arch-tests.h | 14 +-
> > tools/perf/arch/x86/tests/arch-tests.c | 47 +-
> > tools/perf/arch/x86/tests/bp-modify.c | 2 +-
> > tools/perf/arch/x86/tests/insn-x86.c | 2 +-
> > tools/perf/arch/x86/tests/intel-cqm.c | 2 +-
> > .../x86/tests/intel-pt-pkt-decoder-test.c | 2 +-
> > tools/perf/arch/x86/tests/rdpmc.c | 2 +-
> > tools/perf/arch/x86/tests/sample-parsing.c | 2 +-
> > tools/perf/tests/api-io.c | 6 +-
> > tools/perf/tests/attr.c | 4 +-
> > tools/perf/tests/backward-ring-buffer.c | 4 +-
> > tools/perf/tests/bitmap.c | 4 +-
> > tools/perf/tests/bp_account.c | 10 +-
> > tools/perf/tests/bp_signal.c | 8 +-
> > tools/perf/tests/bp_signal_overflow.c | 8 +-
> > tools/perf/tests/bpf.c | 22 +-
> > tools/perf/tests/builtin-test.c | 441 ++++--------------
> > tools/perf/tests/clang.c | 18 +-
> > tools/perf/tests/code-reading.c | 4 +-
> > tools/perf/tests/cpumap.c | 10 +-
> > tools/perf/tests/demangle-java-test.c | 4 +-
> > tools/perf/tests/demangle-ocaml-test.c | 4 +-
> > tools/perf/tests/dlfilter-test.c | 4 +-
> > tools/perf/tests/dso-data.c | 10 +-
> > tools/perf/tests/dwarf-unwind.c | 2 +-
> > tools/perf/tests/event-times.c | 4 +-
> > tools/perf/tests/event_update.c | 4 +-
> > tools/perf/tests/evsel-roundtrip-name.c | 4 +-
> > tools/perf/tests/evsel-tp-sched.c | 4 +-
> > tools/perf/tests/expand-cgroup.c | 6 +-
> > tools/perf/tests/expr.c | 4 +-
> > tools/perf/tests/fdarray.c | 7 +-
> > tools/perf/tests/genelf.c | 6 +-
> > tools/perf/tests/hists_cumulate.c | 4 +-
> > tools/perf/tests/hists_filter.c | 4 +-
> > tools/perf/tests/hists_link.c | 4 +-
> > tools/perf/tests/hists_output.c | 4 +-
> > tools/perf/tests/is_printable_array.c | 4 +-
> > tools/perf/tests/keep-tracking.c | 4 +-
> > tools/perf/tests/kmod-path.c | 4 +-
> > tools/perf/tests/llvm.c | 22 +-
> > tools/perf/tests/maps.c | 4 +-
> > tools/perf/tests/mem.c | 4 +-
> > tools/perf/tests/mem2node.c | 4 +-
> > tools/perf/tests/mmap-basic.c | 4 +-
> > tools/perf/tests/mmap-thread-lookup.c | 4 +-
> > tools/perf/tests/openat-syscall-all-cpus.c | 5 +-
> > tools/perf/tests/openat-syscall-tp-fields.c | 4 +-
> > tools/perf/tests/openat-syscall.c | 5 +-
> > tools/perf/tests/parse-events.c | 4 +-
> > tools/perf/tests/parse-metric.c | 4 +-
> > tools/perf/tests/parse-no-sample-id-all.c | 4 +-
> > tools/perf/tests/pe-file-parsing.c | 6 +-
> > tools/perf/tests/perf-hooks.c | 4 +-
> > tools/perf/tests/perf-record.c | 4 +-
> > tools/perf/tests/perf-time-to-tsc.c | 10 +-
> > tools/perf/tests/pfm.c | 16 +-
> > tools/perf/tests/pmu-events.c | 19 +-
> > tools/perf/tests/pmu.c | 4 +-
> > tools/perf/tests/python-use.c | 4 +-
> > tools/perf/tests/sample-parsing.c | 4 +-
> > tools/perf/tests/sdt.c | 6 +-
> > tools/perf/tests/stat.c | 10 +-
> > tools/perf/tests/sw-clock.c | 4 +-
> > tools/perf/tests/switch-tracking.c | 4 +-
> > tools/perf/tests/task-exit.c | 4 +-
> > tools/perf/tests/tests.h | 179 ++++---
> > tools/perf/tests/thread-map.c | 10 +-
> > tools/perf/tests/thread-maps-share.c | 4 +-
> > tools/perf/tests/time-utils-test.c | 4 +-
> > tools/perf/tests/topology.c | 4 +-
> > tools/perf/tests/unit_number__scnprintf.c | 4 +-
> > tools/perf/tests/vmlinux-kallsyms.c | 5 +-
> > tools/perf/tests/wp.c | 22 +-
> > 81 files changed, 543 insertions(+), 618 deletions(-)
> >
> > --
> > 2.33.0.464.g1972c5931b-goog
> >
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [RFC PATCH 0/5] Start aligning perf test with kunit style
2021-09-22 23:36 ` Ian Rogers
@ 2021-09-26 21:25 ` Jiri Olsa
2021-09-27 16:09 ` Ian Rogers
0 siblings, 1 reply; 16+ messages in thread
From: Jiri Olsa @ 2021-09-26 21:25 UTC (permalink / raw)
To: Ian Rogers
Cc: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Mark Rutland, Alexander Shishkin, Namhyung Kim, Jin Yao,
John Garry, Paul A . Clarke, linux-perf-users, linux-kernel,
Brendan Higgins, Daniel Latypov, David Gow, eranian
On Wed, Sep 22, 2021 at 04:36:05PM -0700, Ian Rogers wrote:
> On Wed, Sep 22, 2021 at 2:55 PM Jiri Olsa <jolsa@redhat.com> wrote:
> >
> > On Wed, Sep 22, 2021 at 01:19:53AM -0700, Ian Rogers wrote:
> > > Perf test uses its own structs and code layout that differs from kunit
> > > that was more recently introduced to the kernel. Besides consistency,
> > > it is hoped that moving in the direction of kunit style will enable
> > > reuse of infrastructure like test output formatting for continuous
> > > testing systems. For example:
> > > https://lore.kernel.org/linux-kselftest/CA+GJov6tdjvY9x12JsJT14qn6c7NViJxqaJk+r-K1YJzPggFDQ@mail.gmail.com/
> > >
> > > The motivation for this restructuring comes from wanting to be able to
> > > tag tests with a size:
> > > https://lore.kernel.org/linux-perf-users/CAP-5=fWmGyuqFKc-EMP3rbmTkjZ3MS+YSajGZfeRMc38HS82gw@mail.gmail.com/
> > > To have more exhaustive and slower running tests. This isn't
> > > something kunit currently supports, nor is the execution of python and
> > > shell tests, but it seems sensible to work on an approach with kunit
> > > rather to invent a new wheel inside of perf.
> > >
> > > These initial patches are just refactoring the main test suite
> > > definitions to be in a more kunit style. Kunit isn't depended upon, it
> > > is hoped that this can be done in later patches for the sake of
> > > consistency.
> >
> > seems good.. how far away from kunit is the code now?
>
> Thanks Jiri, It is a ways away from complete. I was thinking to follow up with:
> * Migrate the current sub-test approach to use kunit style test cases
> within a suite.
> * Combine what are currently independent test suites into one test
> suite with different test cases, for example stat.c contains stat,
> stat_config and stat_round tests.
>
> Once this is done then to unify with kunit we need to work out a
> common pattern for skipping a test, etc. There's already a lot here
> and so I wanted to get an opinion before pushing along further.
>
> > >
> > > v1. Built/tested on x86.
> > >
> > > Ian Rogers (5):
> > > perf test: Use macro for "suite" declarations
> > > perf test: Use macro for "suite" definitions
> > > perf test: Make each test/suite its own struct.
> > > perf test: Move each test suite struct to its test
> > > perf test: Rename struct test to test_suite
> > >
> > > tools/perf/arch/arm/include/arch-tests.h | 2 +-
> > > tools/perf/arch/arm/tests/arch-tests.c | 21 +-
> > > tools/perf/arch/arm/tests/vectors-page.c | 2 +-
> > > tools/perf/arch/arm64/include/arch-tests.h | 2 +-
> > > tools/perf/arch/arm64/tests/arch-tests.c | 15 +-
> > > tools/perf/arch/powerpc/include/arch-tests.h | 2 +-
> > > tools/perf/arch/powerpc/tests/arch-tests.c | 15 +-
> >
> > I can run/test this on ppc/arm if you don't have any
>
> I have pretty easy access to ARM but lost access to PowerPC. If we're
> happy with the direction then I can test ARM and ask for help on
> PowerPC.
it compiles fine on powerpc and failed tests seem reasonable,
before/after perf test output is same apart from this:
[root@ibm-p9z-06-lp7 perf]# diff -puw out.old out.new
--- out.old 2021-09-26 17:15:57.947807813 -0400
+++ out.new 2021-09-26 17:20:51.789918644 -0400
@@ -81,7 +81,7 @@
69: PE file support : Ok
70: Event expansion for cgroups : Ok
72: dlfilter C API : Ok
-73: Test dwarf unwind : Ok
+73: DWARF unwind : Ok
74: build id cache operations : Ok
75: daemon operations : Ok
76: perf pipe recording and injection test : Ok
not sure there's somebody out there parsing this output,
maybe we can find out ;-)
jirka
>
> Thanks,
> Ian
>
> > jirka
> >
> > > tools/perf/arch/x86/include/arch-tests.h | 14 +-
> > > tools/perf/arch/x86/tests/arch-tests.c | 47 +-
> > > tools/perf/arch/x86/tests/bp-modify.c | 2 +-
> > > tools/perf/arch/x86/tests/insn-x86.c | 2 +-
> > > tools/perf/arch/x86/tests/intel-cqm.c | 2 +-
> > > .../x86/tests/intel-pt-pkt-decoder-test.c | 2 +-
> > > tools/perf/arch/x86/tests/rdpmc.c | 2 +-
> > > tools/perf/arch/x86/tests/sample-parsing.c | 2 +-
> > > tools/perf/tests/api-io.c | 6 +-
> > > tools/perf/tests/attr.c | 4 +-
> > > tools/perf/tests/backward-ring-buffer.c | 4 +-
> > > tools/perf/tests/bitmap.c | 4 +-
> > > tools/perf/tests/bp_account.c | 10 +-
> > > tools/perf/tests/bp_signal.c | 8 +-
> > > tools/perf/tests/bp_signal_overflow.c | 8 +-
> > > tools/perf/tests/bpf.c | 22 +-
> > > tools/perf/tests/builtin-test.c | 441 ++++--------------
> > > tools/perf/tests/clang.c | 18 +-
> > > tools/perf/tests/code-reading.c | 4 +-
> > > tools/perf/tests/cpumap.c | 10 +-
> > > tools/perf/tests/demangle-java-test.c | 4 +-
> > > tools/perf/tests/demangle-ocaml-test.c | 4 +-
> > > tools/perf/tests/dlfilter-test.c | 4 +-
> > > tools/perf/tests/dso-data.c | 10 +-
> > > tools/perf/tests/dwarf-unwind.c | 2 +-
> > > tools/perf/tests/event-times.c | 4 +-
> > > tools/perf/tests/event_update.c | 4 +-
> > > tools/perf/tests/evsel-roundtrip-name.c | 4 +-
> > > tools/perf/tests/evsel-tp-sched.c | 4 +-
> > > tools/perf/tests/expand-cgroup.c | 6 +-
> > > tools/perf/tests/expr.c | 4 +-
> > > tools/perf/tests/fdarray.c | 7 +-
> > > tools/perf/tests/genelf.c | 6 +-
> > > tools/perf/tests/hists_cumulate.c | 4 +-
> > > tools/perf/tests/hists_filter.c | 4 +-
> > > tools/perf/tests/hists_link.c | 4 +-
> > > tools/perf/tests/hists_output.c | 4 +-
> > > tools/perf/tests/is_printable_array.c | 4 +-
> > > tools/perf/tests/keep-tracking.c | 4 +-
> > > tools/perf/tests/kmod-path.c | 4 +-
> > > tools/perf/tests/llvm.c | 22 +-
> > > tools/perf/tests/maps.c | 4 +-
> > > tools/perf/tests/mem.c | 4 +-
> > > tools/perf/tests/mem2node.c | 4 +-
> > > tools/perf/tests/mmap-basic.c | 4 +-
> > > tools/perf/tests/mmap-thread-lookup.c | 4 +-
> > > tools/perf/tests/openat-syscall-all-cpus.c | 5 +-
> > > tools/perf/tests/openat-syscall-tp-fields.c | 4 +-
> > > tools/perf/tests/openat-syscall.c | 5 +-
> > > tools/perf/tests/parse-events.c | 4 +-
> > > tools/perf/tests/parse-metric.c | 4 +-
> > > tools/perf/tests/parse-no-sample-id-all.c | 4 +-
> > > tools/perf/tests/pe-file-parsing.c | 6 +-
> > > tools/perf/tests/perf-hooks.c | 4 +-
> > > tools/perf/tests/perf-record.c | 4 +-
> > > tools/perf/tests/perf-time-to-tsc.c | 10 +-
> > > tools/perf/tests/pfm.c | 16 +-
> > > tools/perf/tests/pmu-events.c | 19 +-
> > > tools/perf/tests/pmu.c | 4 +-
> > > tools/perf/tests/python-use.c | 4 +-
> > > tools/perf/tests/sample-parsing.c | 4 +-
> > > tools/perf/tests/sdt.c | 6 +-
> > > tools/perf/tests/stat.c | 10 +-
> > > tools/perf/tests/sw-clock.c | 4 +-
> > > tools/perf/tests/switch-tracking.c | 4 +-
> > > tools/perf/tests/task-exit.c | 4 +-
> > > tools/perf/tests/tests.h | 179 ++++---
> > > tools/perf/tests/thread-map.c | 10 +-
> > > tools/perf/tests/thread-maps-share.c | 4 +-
> > > tools/perf/tests/time-utils-test.c | 4 +-
> > > tools/perf/tests/topology.c | 4 +-
> > > tools/perf/tests/unit_number__scnprintf.c | 4 +-
> > > tools/perf/tests/vmlinux-kallsyms.c | 5 +-
> > > tools/perf/tests/wp.c | 22 +-
> > > 81 files changed, 543 insertions(+), 618 deletions(-)
> > >
> > > --
> > > 2.33.0.464.g1972c5931b-goog
> > >
> >
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [RFC PATCH 0/5] Start aligning perf test with kunit style
2021-09-26 21:25 ` Jiri Olsa
@ 2021-09-27 16:09 ` Ian Rogers
2021-10-08 19:08 ` Arnaldo Carvalho de Melo
0 siblings, 1 reply; 16+ messages in thread
From: Ian Rogers @ 2021-09-27 16:09 UTC (permalink / raw)
To: Jiri Olsa
Cc: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Mark Rutland, Alexander Shishkin, Namhyung Kim, Jin Yao,
John Garry, Paul A . Clarke, linux-perf-users, linux-kernel,
Brendan Higgins, Daniel Latypov, David Gow, eranian
On Sun, Sep 26, 2021 at 2:25 PM Jiri Olsa <jolsa@redhat.com> wrote:
>
> On Wed, Sep 22, 2021 at 04:36:05PM -0700, Ian Rogers wrote:
> > On Wed, Sep 22, 2021 at 2:55 PM Jiri Olsa <jolsa@redhat.com> wrote:
> > >
> > > On Wed, Sep 22, 2021 at 01:19:53AM -0700, Ian Rogers wrote:
> > > > Perf test uses its own structs and code layout that differs from kunit
> > > > that was more recently introduced to the kernel. Besides consistency,
> > > > it is hoped that moving in the direction of kunit style will enable
> > > > reuse of infrastructure like test output formatting for continuous
> > > > testing systems. For example:
> > > > https://lore.kernel.org/linux-kselftest/CA+GJov6tdjvY9x12JsJT14qn6c7NViJxqaJk+r-K1YJzPggFDQ@mail.gmail.com/
> > > >
> > > > The motivation for this restructuring comes from wanting to be able to
> > > > tag tests with a size:
> > > > https://lore.kernel.org/linux-perf-users/CAP-5=fWmGyuqFKc-EMP3rbmTkjZ3MS+YSajGZfeRMc38HS82gw@mail.gmail.com/
> > > > To have more exhaustive and slower running tests. This isn't
> > > > something kunit currently supports, nor is the execution of python and
> > > > shell tests, but it seems sensible to work on an approach with kunit
> > > > rather to invent a new wheel inside of perf.
> > > >
> > > > These initial patches are just refactoring the main test suite
> > > > definitions to be in a more kunit style. Kunit isn't depended upon, it
> > > > is hoped that this can be done in later patches for the sake of
> > > > consistency.
> > >
> > > seems good.. how far away from kunit is the code now?
> >
> > Thanks Jiri, It is a ways away from complete. I was thinking to follow up with:
> > * Migrate the current sub-test approach to use kunit style test cases
> > within a suite.
> > * Combine what are currently independent test suites into one test
> > suite with different test cases, for example stat.c contains stat,
> > stat_config and stat_round tests.
> >
> > Once this is done then to unify with kunit we need to work out a
> > common pattern for skipping a test, etc. There's already a lot here
> > and so I wanted to get an opinion before pushing along further.
> >
> > > >
> > > > v1. Built/tested on x86.
> > > >
> > > > Ian Rogers (5):
> > > > perf test: Use macro for "suite" declarations
> > > > perf test: Use macro for "suite" definitions
> > > > perf test: Make each test/suite its own struct.
> > > > perf test: Move each test suite struct to its test
> > > > perf test: Rename struct test to test_suite
> > > >
> > > > tools/perf/arch/arm/include/arch-tests.h | 2 +-
> > > > tools/perf/arch/arm/tests/arch-tests.c | 21 +-
> > > > tools/perf/arch/arm/tests/vectors-page.c | 2 +-
> > > > tools/perf/arch/arm64/include/arch-tests.h | 2 +-
> > > > tools/perf/arch/arm64/tests/arch-tests.c | 15 +-
> > > > tools/perf/arch/powerpc/include/arch-tests.h | 2 +-
> > > > tools/perf/arch/powerpc/tests/arch-tests.c | 15 +-
> > >
> > > I can run/test this on ppc/arm if you don't have any
> >
> > I have pretty easy access to ARM but lost access to PowerPC. If we're
> > happy with the direction then I can test ARM and ask for help on
> > PowerPC.
>
> it compiles fine on powerpc and failed tests seem reasonable,
> before/after perf test output is same apart from this:
>
> [root@ibm-p9z-06-lp7 perf]# diff -puw out.old out.new
> --- out.old 2021-09-26 17:15:57.947807813 -0400
> +++ out.new 2021-09-26 17:20:51.789918644 -0400
> @@ -81,7 +81,7 @@
> 69: PE file support : Ok
> 70: Event expansion for cgroups : Ok
> 72: dlfilter C API : Ok
> -73: Test dwarf unwind : Ok
> +73: DWARF unwind : Ok
> 74: build id cache operations : Ok
> 75: daemon operations : Ok
> 76: perf pipe recording and injection test : Ok
>
> not sure there's somebody out there parsing this output,
> maybe we can find out ;-)
Thanks, actually we have a parser on this output :-) I will correct the issue.
Ian
> jirka
>
> >
> > Thanks,
> > Ian
> >
> > > jirka
> > >
> > > > tools/perf/arch/x86/include/arch-tests.h | 14 +-
> > > > tools/perf/arch/x86/tests/arch-tests.c | 47 +-
> > > > tools/perf/arch/x86/tests/bp-modify.c | 2 +-
> > > > tools/perf/arch/x86/tests/insn-x86.c | 2 +-
> > > > tools/perf/arch/x86/tests/intel-cqm.c | 2 +-
> > > > .../x86/tests/intel-pt-pkt-decoder-test.c | 2 +-
> > > > tools/perf/arch/x86/tests/rdpmc.c | 2 +-
> > > > tools/perf/arch/x86/tests/sample-parsing.c | 2 +-
> > > > tools/perf/tests/api-io.c | 6 +-
> > > > tools/perf/tests/attr.c | 4 +-
> > > > tools/perf/tests/backward-ring-buffer.c | 4 +-
> > > > tools/perf/tests/bitmap.c | 4 +-
> > > > tools/perf/tests/bp_account.c | 10 +-
> > > > tools/perf/tests/bp_signal.c | 8 +-
> > > > tools/perf/tests/bp_signal_overflow.c | 8 +-
> > > > tools/perf/tests/bpf.c | 22 +-
> > > > tools/perf/tests/builtin-test.c | 441 ++++--------------
> > > > tools/perf/tests/clang.c | 18 +-
> > > > tools/perf/tests/code-reading.c | 4 +-
> > > > tools/perf/tests/cpumap.c | 10 +-
> > > > tools/perf/tests/demangle-java-test.c | 4 +-
> > > > tools/perf/tests/demangle-ocaml-test.c | 4 +-
> > > > tools/perf/tests/dlfilter-test.c | 4 +-
> > > > tools/perf/tests/dso-data.c | 10 +-
> > > > tools/perf/tests/dwarf-unwind.c | 2 +-
> > > > tools/perf/tests/event-times.c | 4 +-
> > > > tools/perf/tests/event_update.c | 4 +-
> > > > tools/perf/tests/evsel-roundtrip-name.c | 4 +-
> > > > tools/perf/tests/evsel-tp-sched.c | 4 +-
> > > > tools/perf/tests/expand-cgroup.c | 6 +-
> > > > tools/perf/tests/expr.c | 4 +-
> > > > tools/perf/tests/fdarray.c | 7 +-
> > > > tools/perf/tests/genelf.c | 6 +-
> > > > tools/perf/tests/hists_cumulate.c | 4 +-
> > > > tools/perf/tests/hists_filter.c | 4 +-
> > > > tools/perf/tests/hists_link.c | 4 +-
> > > > tools/perf/tests/hists_output.c | 4 +-
> > > > tools/perf/tests/is_printable_array.c | 4 +-
> > > > tools/perf/tests/keep-tracking.c | 4 +-
> > > > tools/perf/tests/kmod-path.c | 4 +-
> > > > tools/perf/tests/llvm.c | 22 +-
> > > > tools/perf/tests/maps.c | 4 +-
> > > > tools/perf/tests/mem.c | 4 +-
> > > > tools/perf/tests/mem2node.c | 4 +-
> > > > tools/perf/tests/mmap-basic.c | 4 +-
> > > > tools/perf/tests/mmap-thread-lookup.c | 4 +-
> > > > tools/perf/tests/openat-syscall-all-cpus.c | 5 +-
> > > > tools/perf/tests/openat-syscall-tp-fields.c | 4 +-
> > > > tools/perf/tests/openat-syscall.c | 5 +-
> > > > tools/perf/tests/parse-events.c | 4 +-
> > > > tools/perf/tests/parse-metric.c | 4 +-
> > > > tools/perf/tests/parse-no-sample-id-all.c | 4 +-
> > > > tools/perf/tests/pe-file-parsing.c | 6 +-
> > > > tools/perf/tests/perf-hooks.c | 4 +-
> > > > tools/perf/tests/perf-record.c | 4 +-
> > > > tools/perf/tests/perf-time-to-tsc.c | 10 +-
> > > > tools/perf/tests/pfm.c | 16 +-
> > > > tools/perf/tests/pmu-events.c | 19 +-
> > > > tools/perf/tests/pmu.c | 4 +-
> > > > tools/perf/tests/python-use.c | 4 +-
> > > > tools/perf/tests/sample-parsing.c | 4 +-
> > > > tools/perf/tests/sdt.c | 6 +-
> > > > tools/perf/tests/stat.c | 10 +-
> > > > tools/perf/tests/sw-clock.c | 4 +-
> > > > tools/perf/tests/switch-tracking.c | 4 +-
> > > > tools/perf/tests/task-exit.c | 4 +-
> > > > tools/perf/tests/tests.h | 179 ++++---
> > > > tools/perf/tests/thread-map.c | 10 +-
> > > > tools/perf/tests/thread-maps-share.c | 4 +-
> > > > tools/perf/tests/time-utils-test.c | 4 +-
> > > > tools/perf/tests/topology.c | 4 +-
> > > > tools/perf/tests/unit_number__scnprintf.c | 4 +-
> > > > tools/perf/tests/vmlinux-kallsyms.c | 5 +-
> > > > tools/perf/tests/wp.c | 22 +-
> > > > 81 files changed, 543 insertions(+), 618 deletions(-)
> > > >
> > > > --
> > > > 2.33.0.464.g1972c5931b-goog
> > > >
> > >
> >
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [RFC PATCH 0/5] Start aligning perf test with kunit style
2021-09-27 16:09 ` Ian Rogers
@ 2021-10-08 19:08 ` Arnaldo Carvalho de Melo
2021-10-08 20:04 ` Ian Rogers
0 siblings, 1 reply; 16+ messages in thread
From: Arnaldo Carvalho de Melo @ 2021-10-08 19:08 UTC (permalink / raw)
To: Ian Rogers
Cc: Jiri Olsa, Peter Zijlstra, Ingo Molnar, Mark Rutland,
Alexander Shishkin, Namhyung Kim, Jin Yao, John Garry,
Paul A . Clarke, linux-perf-users, linux-kernel, Brendan Higgins,
Daniel Latypov, David Gow, eranian
Em Mon, Sep 27, 2021 at 09:09:43AM -0700, Ian Rogers escreveu:
> On Sun, Sep 26, 2021 at 2:25 PM Jiri Olsa <jolsa@redhat.com> wrote:
> >
> > On Wed, Sep 22, 2021 at 04:36:05PM -0700, Ian Rogers wrote:
> > > On Wed, Sep 22, 2021 at 2:55 PM Jiri Olsa <jolsa@redhat.com> wrote:
> > > >
> > > > On Wed, Sep 22, 2021 at 01:19:53AM -0700, Ian Rogers wrote:
> > > > > Perf test uses its own structs and code layout that differs from kunit
> > > > > that was more recently introduced to the kernel. Besides consistency,
> > > > > it is hoped that moving in the direction of kunit style will enable
> > > > > reuse of infrastructure like test output formatting for continuous
> > > > > testing systems. For example:
> > > > > https://lore.kernel.org/linux-kselftest/CA+GJov6tdjvY9x12JsJT14qn6c7NViJxqaJk+r-K1YJzPggFDQ@mail.gmail.com/
> > > > >
> > > > > The motivation for this restructuring comes from wanting to be able to
> > > > > tag tests with a size:
> > > > > https://lore.kernel.org/linux-perf-users/CAP-5=fWmGyuqFKc-EMP3rbmTkjZ3MS+YSajGZfeRMc38HS82gw@mail.gmail.com/
> > > > > To have more exhaustive and slower running tests. This isn't
> > > > > something kunit currently supports, nor is the execution of python and
> > > > > shell tests, but it seems sensible to work on an approach with kunit
> > > > > rather to invent a new wheel inside of perf.
> > > > >
> > > > > These initial patches are just refactoring the main test suite
> > > > > definitions to be in a more kunit style. Kunit isn't depended upon, it
> > > > > is hoped that this can be done in later patches for the sake of
> > > > > consistency.
> > > >
> > > > seems good.. how far away from kunit is the code now?
> > >
> > > Thanks Jiri, It is a ways away from complete. I was thinking to follow up with:
> > > * Migrate the current sub-test approach to use kunit style test cases
> > > within a suite.
> > > * Combine what are currently independent test suites into one test
> > > suite with different test cases, for example stat.c contains stat,
> > > stat_config and stat_round tests.
> > >
> > > Once this is done then to unify with kunit we need to work out a
> > > common pattern for skipping a test, etc. There's already a lot here
> > > and so I wanted to get an opinion before pushing along further.
> > >
> > > > >
> > > > > v1. Built/tested on x86.
> > > > >
> > > > > Ian Rogers (5):
> > > > > perf test: Use macro for "suite" declarations
> > > > > perf test: Use macro for "suite" definitions
> > > > > perf test: Make each test/suite its own struct.
> > > > > perf test: Move each test suite struct to its test
> > > > > perf test: Rename struct test to test_suite
> > > > >
> > > > > tools/perf/arch/arm/include/arch-tests.h | 2 +-
> > > > > tools/perf/arch/arm/tests/arch-tests.c | 21 +-
> > > > > tools/perf/arch/arm/tests/vectors-page.c | 2 +-
> > > > > tools/perf/arch/arm64/include/arch-tests.h | 2 +-
> > > > > tools/perf/arch/arm64/tests/arch-tests.c | 15 +-
> > > > > tools/perf/arch/powerpc/include/arch-tests.h | 2 +-
> > > > > tools/perf/arch/powerpc/tests/arch-tests.c | 15 +-
> > > >
> > > > I can run/test this on ppc/arm if you don't have any
> > >
> > > I have pretty easy access to ARM but lost access to PowerPC. If we're
> > > happy with the direction then I can test ARM and ask for help on
> > > PowerPC.
> >
> > it compiles fine on powerpc and failed tests seem reasonable,
> > before/after perf test output is same apart from this:
> >
> > [root@ibm-p9z-06-lp7 perf]# diff -puw out.old out.new
> > --- out.old 2021-09-26 17:15:57.947807813 -0400
> > +++ out.new 2021-09-26 17:20:51.789918644 -0400
> > @@ -81,7 +81,7 @@
> > 69: PE file support : Ok
> > 70: Event expansion for cgroups : Ok
> > 72: dlfilter C API : Ok
> > -73: Test dwarf unwind : Ok
> > +73: DWARF unwind : Ok
> > 74: build id cache operations : Ok
> > 75: daemon operations : Ok
> > 76: perf pipe recording and injection test : Ok
> >
> > not sure there's somebody out there parsing this output,
> > maybe we can find out ;-)
>
> Thanks, actually we have a parser on this output :-) I will correct the issue.
Seems like the right direction, people are ok with it, v2 time?
- Arnaldo
> Ian
>
> > jirka
> >
> > >
> > > Thanks,
> > > Ian
> > >
> > > > jirka
> > > >
> > > > > tools/perf/arch/x86/include/arch-tests.h | 14 +-
> > > > > tools/perf/arch/x86/tests/arch-tests.c | 47 +-
> > > > > tools/perf/arch/x86/tests/bp-modify.c | 2 +-
> > > > > tools/perf/arch/x86/tests/insn-x86.c | 2 +-
> > > > > tools/perf/arch/x86/tests/intel-cqm.c | 2 +-
> > > > > .../x86/tests/intel-pt-pkt-decoder-test.c | 2 +-
> > > > > tools/perf/arch/x86/tests/rdpmc.c | 2 +-
> > > > > tools/perf/arch/x86/tests/sample-parsing.c | 2 +-
> > > > > tools/perf/tests/api-io.c | 6 +-
> > > > > tools/perf/tests/attr.c | 4 +-
> > > > > tools/perf/tests/backward-ring-buffer.c | 4 +-
> > > > > tools/perf/tests/bitmap.c | 4 +-
> > > > > tools/perf/tests/bp_account.c | 10 +-
> > > > > tools/perf/tests/bp_signal.c | 8 +-
> > > > > tools/perf/tests/bp_signal_overflow.c | 8 +-
> > > > > tools/perf/tests/bpf.c | 22 +-
> > > > > tools/perf/tests/builtin-test.c | 441 ++++--------------
> > > > > tools/perf/tests/clang.c | 18 +-
> > > > > tools/perf/tests/code-reading.c | 4 +-
> > > > > tools/perf/tests/cpumap.c | 10 +-
> > > > > tools/perf/tests/demangle-java-test.c | 4 +-
> > > > > tools/perf/tests/demangle-ocaml-test.c | 4 +-
> > > > > tools/perf/tests/dlfilter-test.c | 4 +-
> > > > > tools/perf/tests/dso-data.c | 10 +-
> > > > > tools/perf/tests/dwarf-unwind.c | 2 +-
> > > > > tools/perf/tests/event-times.c | 4 +-
> > > > > tools/perf/tests/event_update.c | 4 +-
> > > > > tools/perf/tests/evsel-roundtrip-name.c | 4 +-
> > > > > tools/perf/tests/evsel-tp-sched.c | 4 +-
> > > > > tools/perf/tests/expand-cgroup.c | 6 +-
> > > > > tools/perf/tests/expr.c | 4 +-
> > > > > tools/perf/tests/fdarray.c | 7 +-
> > > > > tools/perf/tests/genelf.c | 6 +-
> > > > > tools/perf/tests/hists_cumulate.c | 4 +-
> > > > > tools/perf/tests/hists_filter.c | 4 +-
> > > > > tools/perf/tests/hists_link.c | 4 +-
> > > > > tools/perf/tests/hists_output.c | 4 +-
> > > > > tools/perf/tests/is_printable_array.c | 4 +-
> > > > > tools/perf/tests/keep-tracking.c | 4 +-
> > > > > tools/perf/tests/kmod-path.c | 4 +-
> > > > > tools/perf/tests/llvm.c | 22 +-
> > > > > tools/perf/tests/maps.c | 4 +-
> > > > > tools/perf/tests/mem.c | 4 +-
> > > > > tools/perf/tests/mem2node.c | 4 +-
> > > > > tools/perf/tests/mmap-basic.c | 4 +-
> > > > > tools/perf/tests/mmap-thread-lookup.c | 4 +-
> > > > > tools/perf/tests/openat-syscall-all-cpus.c | 5 +-
> > > > > tools/perf/tests/openat-syscall-tp-fields.c | 4 +-
> > > > > tools/perf/tests/openat-syscall.c | 5 +-
> > > > > tools/perf/tests/parse-events.c | 4 +-
> > > > > tools/perf/tests/parse-metric.c | 4 +-
> > > > > tools/perf/tests/parse-no-sample-id-all.c | 4 +-
> > > > > tools/perf/tests/pe-file-parsing.c | 6 +-
> > > > > tools/perf/tests/perf-hooks.c | 4 +-
> > > > > tools/perf/tests/perf-record.c | 4 +-
> > > > > tools/perf/tests/perf-time-to-tsc.c | 10 +-
> > > > > tools/perf/tests/pfm.c | 16 +-
> > > > > tools/perf/tests/pmu-events.c | 19 +-
> > > > > tools/perf/tests/pmu.c | 4 +-
> > > > > tools/perf/tests/python-use.c | 4 +-
> > > > > tools/perf/tests/sample-parsing.c | 4 +-
> > > > > tools/perf/tests/sdt.c | 6 +-
> > > > > tools/perf/tests/stat.c | 10 +-
> > > > > tools/perf/tests/sw-clock.c | 4 +-
> > > > > tools/perf/tests/switch-tracking.c | 4 +-
> > > > > tools/perf/tests/task-exit.c | 4 +-
> > > > > tools/perf/tests/tests.h | 179 ++++---
> > > > > tools/perf/tests/thread-map.c | 10 +-
> > > > > tools/perf/tests/thread-maps-share.c | 4 +-
> > > > > tools/perf/tests/time-utils-test.c | 4 +-
> > > > > tools/perf/tests/topology.c | 4 +-
> > > > > tools/perf/tests/unit_number__scnprintf.c | 4 +-
> > > > > tools/perf/tests/vmlinux-kallsyms.c | 5 +-
> > > > > tools/perf/tests/wp.c | 22 +-
> > > > > 81 files changed, 543 insertions(+), 618 deletions(-)
> > > > >
> > > > > --
> > > > > 2.33.0.464.g1972c5931b-goog
> > > > >
> > > >
> > >
> >
--
- Arnaldo
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [RFC PATCH 0/5] Start aligning perf test with kunit style
2021-10-08 19:08 ` Arnaldo Carvalho de Melo
@ 2021-10-08 20:04 ` Ian Rogers
0 siblings, 0 replies; 16+ messages in thread
From: Ian Rogers @ 2021-10-08 20:04 UTC (permalink / raw)
To: Arnaldo Carvalho de Melo
Cc: Jiri Olsa, Peter Zijlstra, Ingo Molnar, Mark Rutland,
Alexander Shishkin, Namhyung Kim, Jin Yao, John Garry,
Paul A . Clarke, linux-perf-users, linux-kernel, Brendan Higgins,
Daniel Latypov, David Gow, eranian
On Fri, Oct 8, 2021 at 12:08 PM Arnaldo Carvalho de Melo
<acme@kernel.org> wrote:
>
> Em Mon, Sep 27, 2021 at 09:09:43AM -0700, Ian Rogers escreveu:
> > On Sun, Sep 26, 2021 at 2:25 PM Jiri Olsa <jolsa@redhat.com> wrote:
> > >
> > > On Wed, Sep 22, 2021 at 04:36:05PM -0700, Ian Rogers wrote:
> > > > On Wed, Sep 22, 2021 at 2:55 PM Jiri Olsa <jolsa@redhat.com> wrote:
> > > > >
> > > > > On Wed, Sep 22, 2021 at 01:19:53AM -0700, Ian Rogers wrote:
> > > > > > Perf test uses its own structs and code layout that differs from kunit
> > > > > > that was more recently introduced to the kernel. Besides consistency,
> > > > > > it is hoped that moving in the direction of kunit style will enable
> > > > > > reuse of infrastructure like test output formatting for continuous
> > > > > > testing systems. For example:
> > > > > > https://lore.kernel.org/linux-kselftest/CA+GJov6tdjvY9x12JsJT14qn6c7NViJxqaJk+r-K1YJzPggFDQ@mail.gmail.com/
> > > > > >
> > > > > > The motivation for this restructuring comes from wanting to be able to
> > > > > > tag tests with a size:
> > > > > > https://lore.kernel.org/linux-perf-users/CAP-5=fWmGyuqFKc-EMP3rbmTkjZ3MS+YSajGZfeRMc38HS82gw@mail.gmail.com/
> > > > > > To have more exhaustive and slower running tests. This isn't
> > > > > > something kunit currently supports, nor is the execution of python and
> > > > > > shell tests, but it seems sensible to work on an approach with kunit
> > > > > > rather to invent a new wheel inside of perf.
> > > > > >
> > > > > > These initial patches are just refactoring the main test suite
> > > > > > definitions to be in a more kunit style. Kunit isn't depended upon, it
> > > > > > is hoped that this can be done in later patches for the sake of
> > > > > > consistency.
> > > > >
> > > > > seems good.. how far away from kunit is the code now?
> > > >
> > > > Thanks Jiri, It is a ways away from complete. I was thinking to follow up with:
> > > > * Migrate the current sub-test approach to use kunit style test cases
> > > > within a suite.
> > > > * Combine what are currently independent test suites into one test
> > > > suite with different test cases, for example stat.c contains stat,
> > > > stat_config and stat_round tests.
> > > >
> > > > Once this is done then to unify with kunit we need to work out a
> > > > common pattern for skipping a test, etc. There's already a lot here
> > > > and so I wanted to get an opinion before pushing along further.
> > > >
> > > > > >
> > > > > > v1. Built/tested on x86.
> > > > > >
> > > > > > Ian Rogers (5):
> > > > > > perf test: Use macro for "suite" declarations
> > > > > > perf test: Use macro for "suite" definitions
> > > > > > perf test: Make each test/suite its own struct.
> > > > > > perf test: Move each test suite struct to its test
> > > > > > perf test: Rename struct test to test_suite
> > > > > >
> > > > > > tools/perf/arch/arm/include/arch-tests.h | 2 +-
> > > > > > tools/perf/arch/arm/tests/arch-tests.c | 21 +-
> > > > > > tools/perf/arch/arm/tests/vectors-page.c | 2 +-
> > > > > > tools/perf/arch/arm64/include/arch-tests.h | 2 +-
> > > > > > tools/perf/arch/arm64/tests/arch-tests.c | 15 +-
> > > > > > tools/perf/arch/powerpc/include/arch-tests.h | 2 +-
> > > > > > tools/perf/arch/powerpc/tests/arch-tests.c | 15 +-
> > > > >
> > > > > I can run/test this on ppc/arm if you don't have any
> > > >
> > > > I have pretty easy access to ARM but lost access to PowerPC. If we're
> > > > happy with the direction then I can test ARM and ask for help on
> > > > PowerPC.
> > >
> > > it compiles fine on powerpc and failed tests seem reasonable,
> > > before/after perf test output is same apart from this:
> > >
> > > [root@ibm-p9z-06-lp7 perf]# diff -puw out.old out.new
> > > --- out.old 2021-09-26 17:15:57.947807813 -0400
> > > +++ out.new 2021-09-26 17:20:51.789918644 -0400
> > > @@ -81,7 +81,7 @@
> > > 69: PE file support : Ok
> > > 70: Event expansion for cgroups : Ok
> > > 72: dlfilter C API : Ok
> > > -73: Test dwarf unwind : Ok
> > > +73: DWARF unwind : Ok
> > > 74: build id cache operations : Ok
> > > 75: daemon operations : Ok
> > > 76: perf pipe recording and injection test : Ok
> > >
> > > not sure there's somebody out there parsing this output,
> > > maybe we can find out ;-)
> >
> > Thanks, actually we have a parser on this output :-) I will correct the issue.
>
> Seems like the right direction, people are ok with it, v2 time?
Thanks! I'm working on v2, I've fixed up wrt Jiri's comments and I'm
working on using the test_case style for subtests. I hope to send it
out soon-ish.
Thanks,
Ian
> - Arnaldo
>
> > Ian
> >
> > > jirka
> > >
> > > >
> > > > Thanks,
> > > > Ian
> > > >
> > > > > jirka
> > > > >
> > > > > > tools/perf/arch/x86/include/arch-tests.h | 14 +-
> > > > > > tools/perf/arch/x86/tests/arch-tests.c | 47 +-
> > > > > > tools/perf/arch/x86/tests/bp-modify.c | 2 +-
> > > > > > tools/perf/arch/x86/tests/insn-x86.c | 2 +-
> > > > > > tools/perf/arch/x86/tests/intel-cqm.c | 2 +-
> > > > > > .../x86/tests/intel-pt-pkt-decoder-test.c | 2 +-
> > > > > > tools/perf/arch/x86/tests/rdpmc.c | 2 +-
> > > > > > tools/perf/arch/x86/tests/sample-parsing.c | 2 +-
> > > > > > tools/perf/tests/api-io.c | 6 +-
> > > > > > tools/perf/tests/attr.c | 4 +-
> > > > > > tools/perf/tests/backward-ring-buffer.c | 4 +-
> > > > > > tools/perf/tests/bitmap.c | 4 +-
> > > > > > tools/perf/tests/bp_account.c | 10 +-
> > > > > > tools/perf/tests/bp_signal.c | 8 +-
> > > > > > tools/perf/tests/bp_signal_overflow.c | 8 +-
> > > > > > tools/perf/tests/bpf.c | 22 +-
> > > > > > tools/perf/tests/builtin-test.c | 441 ++++--------------
> > > > > > tools/perf/tests/clang.c | 18 +-
> > > > > > tools/perf/tests/code-reading.c | 4 +-
> > > > > > tools/perf/tests/cpumap.c | 10 +-
> > > > > > tools/perf/tests/demangle-java-test.c | 4 +-
> > > > > > tools/perf/tests/demangle-ocaml-test.c | 4 +-
> > > > > > tools/perf/tests/dlfilter-test.c | 4 +-
> > > > > > tools/perf/tests/dso-data.c | 10 +-
> > > > > > tools/perf/tests/dwarf-unwind.c | 2 +-
> > > > > > tools/perf/tests/event-times.c | 4 +-
> > > > > > tools/perf/tests/event_update.c | 4 +-
> > > > > > tools/perf/tests/evsel-roundtrip-name.c | 4 +-
> > > > > > tools/perf/tests/evsel-tp-sched.c | 4 +-
> > > > > > tools/perf/tests/expand-cgroup.c | 6 +-
> > > > > > tools/perf/tests/expr.c | 4 +-
> > > > > > tools/perf/tests/fdarray.c | 7 +-
> > > > > > tools/perf/tests/genelf.c | 6 +-
> > > > > > tools/perf/tests/hists_cumulate.c | 4 +-
> > > > > > tools/perf/tests/hists_filter.c | 4 +-
> > > > > > tools/perf/tests/hists_link.c | 4 +-
> > > > > > tools/perf/tests/hists_output.c | 4 +-
> > > > > > tools/perf/tests/is_printable_array.c | 4 +-
> > > > > > tools/perf/tests/keep-tracking.c | 4 +-
> > > > > > tools/perf/tests/kmod-path.c | 4 +-
> > > > > > tools/perf/tests/llvm.c | 22 +-
> > > > > > tools/perf/tests/maps.c | 4 +-
> > > > > > tools/perf/tests/mem.c | 4 +-
> > > > > > tools/perf/tests/mem2node.c | 4 +-
> > > > > > tools/perf/tests/mmap-basic.c | 4 +-
> > > > > > tools/perf/tests/mmap-thread-lookup.c | 4 +-
> > > > > > tools/perf/tests/openat-syscall-all-cpus.c | 5 +-
> > > > > > tools/perf/tests/openat-syscall-tp-fields.c | 4 +-
> > > > > > tools/perf/tests/openat-syscall.c | 5 +-
> > > > > > tools/perf/tests/parse-events.c | 4 +-
> > > > > > tools/perf/tests/parse-metric.c | 4 +-
> > > > > > tools/perf/tests/parse-no-sample-id-all.c | 4 +-
> > > > > > tools/perf/tests/pe-file-parsing.c | 6 +-
> > > > > > tools/perf/tests/perf-hooks.c | 4 +-
> > > > > > tools/perf/tests/perf-record.c | 4 +-
> > > > > > tools/perf/tests/perf-time-to-tsc.c | 10 +-
> > > > > > tools/perf/tests/pfm.c | 16 +-
> > > > > > tools/perf/tests/pmu-events.c | 19 +-
> > > > > > tools/perf/tests/pmu.c | 4 +-
> > > > > > tools/perf/tests/python-use.c | 4 +-
> > > > > > tools/perf/tests/sample-parsing.c | 4 +-
> > > > > > tools/perf/tests/sdt.c | 6 +-
> > > > > > tools/perf/tests/stat.c | 10 +-
> > > > > > tools/perf/tests/sw-clock.c | 4 +-
> > > > > > tools/perf/tests/switch-tracking.c | 4 +-
> > > > > > tools/perf/tests/task-exit.c | 4 +-
> > > > > > tools/perf/tests/tests.h | 179 ++++---
> > > > > > tools/perf/tests/thread-map.c | 10 +-
> > > > > > tools/perf/tests/thread-maps-share.c | 4 +-
> > > > > > tools/perf/tests/time-utils-test.c | 4 +-
> > > > > > tools/perf/tests/topology.c | 4 +-
> > > > > > tools/perf/tests/unit_number__scnprintf.c | 4 +-
> > > > > > tools/perf/tests/vmlinux-kallsyms.c | 5 +-
> > > > > > tools/perf/tests/wp.c | 22 +-
> > > > > > 81 files changed, 543 insertions(+), 618 deletions(-)
> > > > > >
> > > > > > --
> > > > > > 2.33.0.464.g1972c5931b-goog
> > > > > >
> > > > >
> > > >
> > >
>
> --
>
> - Arnaldo
^ permalink raw reply [flat|nested] 16+ messages in thread