1 // SPDX-License-Identifier: GPL-2.0
4 #include "parse-events.h"
8 #include <linux/kernel.h>
10 static int perf_evsel__roundtrip_cache_name_test(void)
13 int type
, op
, err
= 0, ret
= 0, i
, idx
;
15 struct evlist
*evlist
= evlist__new();
20 for (type
= 0; type
< PERF_COUNT_HW_CACHE_MAX
; type
++) {
21 for (op
= 0; op
< PERF_COUNT_HW_CACHE_OP_MAX
; op
++) {
22 /* skip invalid cache type */
23 if (!evsel__is_cache_op_valid(type
, op
))
26 for (i
= 0; i
< PERF_COUNT_HW_CACHE_RESULT_MAX
; i
++) {
27 __evsel__hw_cache_type_op_res_name(type
, op
, i
, name
, sizeof(name
));
28 err
= parse_events(evlist
, name
, NULL
);
36 evsel
= evlist__first(evlist
);
38 for (type
= 0; type
< PERF_COUNT_HW_CACHE_MAX
; type
++) {
39 for (op
= 0; op
< PERF_COUNT_HW_CACHE_OP_MAX
; op
++) {
40 /* skip invalid cache type */
41 if (!evsel__is_cache_op_valid(type
, op
))
44 for (i
= 0; i
< PERF_COUNT_HW_CACHE_RESULT_MAX
; i
++) {
45 __evsel__hw_cache_type_op_res_name(type
, op
, i
, name
, sizeof(name
));
46 if (evsel
->idx
!= idx
)
51 if (strcmp(evsel__name(evsel
), name
)) {
52 pr_debug("%s != %s\n", evsel__name(evsel
), name
);
56 evsel
= evsel__next(evsel
);
61 evlist__delete(evlist
);
65 static int __perf_evsel__name_array_test(const char *names
[], int nr_names
)
69 struct evlist
*evlist
= evlist__new();
74 for (i
= 0; i
< nr_names
; ++i
) {
75 err
= parse_events(evlist
, names
[i
], NULL
);
77 pr_debug("failed to parse event '%s', err %d\n",
79 goto out_delete_evlist
;
84 evlist__for_each_entry(evlist
, evsel
) {
85 if (strcmp(evsel__name(evsel
), names
[evsel
->idx
])) {
87 pr_debug("%s != %s\n", evsel__name(evsel
), names
[evsel
->idx
]);
92 evlist__delete(evlist
);
96 #define perf_evsel__name_array_test(names) \
97 __perf_evsel__name_array_test(names, ARRAY_SIZE(names))
99 int test__perf_evsel__roundtrip_name_test(struct test
*test __maybe_unused
, int subtest __maybe_unused
)
101 int err
= 0, ret
= 0;
103 err
= perf_evsel__name_array_test(evsel__hw_names
);
107 err
= __perf_evsel__name_array_test(evsel__sw_names
, PERF_COUNT_SW_DUMMY
+ 1);
111 err
= perf_evsel__roundtrip_cache_name_test();