1 // SPDX-License-Identifier: GPL-2.0
2 #include "arch-tests.h"
3 #include "linux/perf_event.h"
4 #include "tests/tests.h"
7 #include "../perf-sys.h"
10 #define NR_SUB_TESTS 5
12 static struct sub_tests
{
16 } sub_tests
[NR_SUB_TESTS
] = {
17 { PERF_TYPE_HARDWARE
, PERF_COUNT_HW_CPU_CYCLES
, true },
18 { PERF_TYPE_HARDWARE
, PERF_COUNT_HW_INSTRUCTIONS
, false },
19 { PERF_TYPE_RAW
, 0x076, true },
20 { PERF_TYPE_RAW
, 0x0C1, true },
21 { PERF_TYPE_RAW
, 0x012, false },
24 static int event_open(int type
, unsigned long config
)
26 struct perf_event_attr attr
;
28 memset(&attr
, 0, sizeof(struct perf_event_attr
));
30 attr
.size
= sizeof(struct perf_event_attr
);
34 attr
.sample_type
= PERF_SAMPLE_IP
| PERF_SAMPLE_TID
;
35 attr
.sample_period
= 100000;
37 return sys_perf_event_open(&attr
, -1, 0, -1, 0);
40 int test__amd_ibs_via_core_pmu(struct test_suite
*test __maybe_unused
,
41 int subtest __maybe_unused
)
43 struct perf_pmu
*ibs_pmu
;
47 ibs_pmu
= perf_pmus__find("ibs_op");
51 for (i
= 0; i
< NR_SUB_TESTS
; i
++) {
52 fd
= event_open(sub_tests
[i
].type
, sub_tests
[i
].config
);
53 pr_debug("type: 0x%x, config: 0x%lx, fd: %d - ", sub_tests
[i
].type
,
54 sub_tests
[i
].config
, fd
);
55 if ((sub_tests
[i
].valid
&& fd
== -1) ||
56 (!sub_tests
[i
].valid
&& fd
> 0)) {