From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Ian Rogers <irogers@google.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>,
Mark Rutland <mark.rutland@arm.com>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Jiri Olsa <jolsa@redhat.com>, Namhyung Kim <namhyung@kernel.org>,
Jin Yao <yao.jin@linux.intel.com>,
John Garry <john.garry@huawei.com>,
"Paul A . Clarke" <pc@us.ibm.com>,
linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org,
Brendan Higgins <brendanhiggins@google.com>,
Daniel Latypov <dlatypov@google.com>,
David Gow <davidgow@google.com>,
Sohaib Mohamed <sohaib.amhmd@gmail.com>,
eranian@google.com
Subject: Re: [PATCH v3 03/22] perf test: Make each test/suite its own struct.
Date: Sat, 13 Nov 2021 10:06:32 -0300 [thread overview]
Message-ID: <YY+4WNB6GGWrkzvT@kernel.org> (raw)
In-Reply-To: <20211104064208.3156807-4-irogers@google.com>
Em Wed, Nov 03, 2021 at 11:41:49PM -0700, Ian Rogers escreveu:
> 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 | 18 +-
> tools/perf/arch/arm64/include/arch-tests.h | 2 +-
> tools/perf/arch/arm64/tests/arch-tests.c | 11 +-
> tools/perf/arch/powerpc/include/arch-tests.h | 2 +-
> tools/perf/arch/powerpc/tests/arch-tests.c | 11 +-
> 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/dwarf-unwind.c | 7 +-
> tools/perf/tests/tests.h | 8 +-
> 11 files changed, 215 insertions(+), 168 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..5287729026ab 100644
> --- a/tools/perf/arch/arm/tests/arch-tests.c
> +++ b/tools/perf/arch/arm/tests/arch-tests.c
> @@ -3,18 +3,12 @@
> #include "tests/tests.h"
> #include "arch-tests.h"
>
> -struct test arch_tests[] = {
> +DEFINE_SUITE("Vectors page", vectors_page);
> +
> +struct test *arch_tests[] = {
> #ifdef HAVE_DWARF_UNWIND_SUPPORT
> - {
> - .desc = "DWARF unwind",
> - .func = test__dwarf_unwind,
> - },
> + &dwarf_unwind,
> #endif
> - {
> - .desc = "Vectors page",
> - .func = test__vectors_page,
> - },
> - {
> - .func = NULL,
> - },
> + &vectors_pages,
Its "vector_page", not plural, I'm fixing it up from this point onwards.
- Arnaldo
> + 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..bc327048b807 100644
> --- a/tools/perf/arch/arm64/tests/arch-tests.c
> +++ b/tools/perf/arch/arm64/tests/arch-tests.c
> @@ -3,14 +3,9 @@
> #include "tests/tests.h"
> #include "arch-tests.h"
>
> -struct test arch_tests[] = {
> +struct test *arch_tests[] = {
> #ifdef HAVE_DWARF_UNWIND_SUPPORT
> - {
> - .desc = "DWARF unwind",
> - .func = test__dwarf_unwind,
> - },
> + &dwarf_unwind,
> #endif
> - {
> - .func = NULL,
> - },
> + 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..bc327048b807 100644
> --- a/tools/perf/arch/powerpc/tests/arch-tests.c
> +++ b/tools/perf/arch/powerpc/tests/arch-tests.c
> @@ -3,14 +3,9 @@
> #include "tests/tests.h"
> #include "arch-tests.h"
>
> -struct test arch_tests[] = {
> +struct test *arch_tests[] = {
> #ifdef HAVE_DWARF_UNWIND_SUPPORT
> - {
> - .desc = "Test dwarf unwind",
> - .func = test__dwarf_unwind,
> - },
> + &dwarf_unwind,
> #endif
> - {
> - .func = NULL,
> - },
> + 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..f5e3195768a4 100644
> --- a/tools/perf/arch/x86/tests/arch-tests.c
> +++ b/tools/perf/arch/x86/tests/arch-tests.c
> @@ -3,39 +3,28 @@
> #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_AUXTRACE_SUPPORT
> +DEFINE_SUITE("x86 instruction decoder - new instructions", insn_x86);
> +DEFINE_SUITE("Intel PT packet decoder", intel_pt_pkt_decoder);
> +#endif
> +#if defined(__x86_64__)
> +DEFINE_SUITE("x86 bp modify", bp_modify);
> +#endif
> +DEFINE_SUITE("x86 Sample parsing", x86_sample_parsing);
> +
> +struct test *arch_tests[] = {
> + &rdpmc,
> #ifdef HAVE_DWARF_UNWIND_SUPPORT
> - {
> - .desc = "DWARF unwind",
> - .func = test__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,
> - },
> + &insn_x86,
> + &intel_pt_pkt_decoder,
> #endif
> #if defined(__x86_64__)
> - {
> - .desc = "x86 bp modify",
> - .func = test__bp_modify,
> - },
> + &bp_modify,
> #endif
> - {
> - .desc = "x86 Sample parsing",
> - .func = test__x86_sample_parsing,
> - },
> - {
> - .func = NULL,
> - },
> -
> + &x86_sample_parsing,
> + NULL,
> };
> 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/dwarf-unwind.c b/tools/perf/tests/dwarf-unwind.c
> index c756284b3b13..38f16a53613f 100644
> --- a/tools/perf/tests/dwarf-unwind.c
> +++ b/tools/perf/tests/dwarf-unwind.c
> @@ -195,7 +195,7 @@ NO_TAIL_CALL_ATTRIBUTE noinline int test_dwarf_unwind__krava_1(struct thread *th
> return ret;
> }
>
> -int test__dwarf_unwind(struct test *test __maybe_unused, int subtest __maybe_unused)
> +static int test__dwarf_unwind(struct test *test __maybe_unused, int subtest __maybe_unused)
> {
> struct machine *machine;
> struct thread *thread;
> @@ -237,3 +237,8 @@ int test__dwarf_unwind(struct test *test __maybe_unused, int subtest __maybe_unu
> machine__delete(machine);
> return err;
> }
> +
> +struct test dwarf_unwind = {
> + .desc = "Test dwarf unwind",
> + .func = test__dwarf_unwind,
> +};
> diff --git a/tools/perf/tests/tests.h b/tools/perf/tests/tests.h
> index 0846f66d67f9..8323a3c88284 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);
> @@ -78,7 +84,7 @@ DECLARE_SUITE(code_reading);
> DECLARE_SUITE(sample_parsing);
> DECLARE_SUITE(keep_tracking);
> DECLARE_SUITE(parse_no_sample_id_all);
> -DECLARE_SUITE(dwarf_unwind);
> +extern struct test dwarf_unwind;
> DECLARE_SUITE(expr);
> DECLARE_SUITE(hists_filter);
> DECLARE_SUITE(mmap_thread_lookup);
> --
> 2.33.1.1089.g2158813163f-goog
--
- Arnaldo
next prev parent reply other threads:[~2021-11-13 13:06 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-11-04 6:41 [PATCH v3 00/22] Start aligning perf test with kunit style Ian Rogers
2021-11-04 6:41 ` [PATCH v3 01/22] perf test: Use macro for "suite" declarations Ian Rogers
2021-11-04 6:41 ` [PATCH v3 02/22] perf test: Use macro for "suite" definitions Ian Rogers
2021-11-04 6:41 ` [PATCH v3 03/22] perf test: Make each test/suite its own struct Ian Rogers
2021-11-13 13:06 ` Arnaldo Carvalho de Melo [this message]
2021-11-13 13:29 ` Arnaldo Carvalho de Melo
2021-11-04 6:41 ` [PATCH v3 04/22] perf test: Move each test suite struct to its test Ian Rogers
2021-11-04 6:41 ` [PATCH v3 05/22] perf test: Rename struct test to test_suite Ian Rogers
2021-11-04 6:41 ` [PATCH v3 06/22] perf test: Add helper functions for abstraction Ian Rogers
2021-11-04 6:41 ` [PATCH v3 07/22] perf test: Add test case struct Ian Rogers
2021-11-04 6:41 ` [PATCH v3 08/22] perf test: Add skip reason to test case Ian Rogers
2021-11-04 6:41 ` [PATCH v3 09/22] perf test: Convert pfm tests to use test cases Ian Rogers
2021-11-04 6:41 ` [PATCH v3 10/22] perf test: Convert pmu event tests to " Ian Rogers
2021-11-04 6:41 ` [PATCH v3 11/22] perf test: Convert watch point " Ian Rogers
2021-11-04 6:41 ` [PATCH v3 12/22] perf test: Convert clang " Ian Rogers
2021-11-04 6:41 ` [PATCH v3 13/22] perf test: Convert bpf " Ian Rogers
2021-11-04 6:42 ` [PATCH v3 14/22] perf test: Convert llvm " Ian Rogers
2021-11-04 6:42 ` [PATCH v3 15/22] perf test: Remove now unused subtest helpers Ian Rogers
2021-11-04 6:42 ` [PATCH v3 16/22] perf test: bp tests use test case Ian Rogers
2021-11-04 6:42 ` [PATCH v3 17/22] perf test: Convert time to tsc test to " Ian Rogers
2021-11-04 6:42 ` [PATCH v3 18/22] perf test: Remove non test case style support Ian Rogers
2021-11-04 6:42 ` [PATCH v3 19/22] perf test: BP tests, remove is_supported use Ian Rogers
2021-11-04 6:42 ` [PATCH v3 20/22] perf test: TSC test, " Ian Rogers
2021-11-04 6:42 ` [PATCH v3 21/22] perf test: Remove is_supported function Ian Rogers
2021-11-04 6:42 ` [PATCH v3 22/22] perf test: Remove skip_if_fail Ian Rogers
2021-11-04 13:51 ` Sohaib Mohamed
2021-11-09 14:32 ` Arnaldo Carvalho de Melo
2021-11-10 15:44 ` Sohaib Mohamed
2021-11-09 11:08 ` [PATCH v3 00/22] Start aligning perf test with kunit style Jiri Olsa
2021-11-10 12:20 ` Arnaldo Carvalho de Melo
2021-11-10 16:12 ` Sohaib Mohamed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YY+4WNB6GGWrkzvT@kernel.org \
--to=acme@kernel.org \
--cc=alexander.shishkin@linux.intel.com \
--cc=brendanhiggins@google.com \
--cc=davidgow@google.com \
--cc=dlatypov@google.com \
--cc=eranian@google.com \
--cc=irogers@google.com \
--cc=john.garry@huawei.com \
--cc=jolsa@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=pc@us.ibm.com \
--cc=peterz@infradead.org \
--cc=sohaib.amhmd@gmail.com \
--cc=yao.jin@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.