1 | // SPDX-License-Identifier: GPL-2.0-only |
2 | /* |
3 | * Copyright 2022, Athira Rajeev, IBM Corp. |
4 | */ |
5 | |
6 | #include <stdio.h> |
7 | #include "../event.h" |
8 | #include <sys/prctl.h> |
9 | #include <limits.h> |
10 | #include "../sampling_tests/misc.h" |
11 | |
12 | /* |
13 | * Testcase for group constraint check for |
14 | * Performance Monitor Counter 5 (PMC5) and also |
15 | * Performance Monitor Counter 6 (PMC6). |
16 | * Test that pmc5/6 is excluded from constraint |
17 | * check when scheduled along with group of events. |
18 | */ |
19 | |
20 | static int group_pmc56_exclude_constraints(void) |
21 | { |
22 | struct event *e, events[3]; |
23 | int i; |
24 | |
25 | /* Check for platform support for the test */ |
26 | SKIP_IF(platform_check_for_tests()); |
27 | |
28 | /* |
29 | * PMC5/6 is excluded from constraint bit |
30 | * check along with group of events. Use |
31 | * group of events with PMC5, PMC6 and also |
32 | * event with cache bit (dc_ic) set. Test expects |
33 | * this set of events to go in as a group. |
34 | */ |
35 | e = &events[0]; |
36 | event_init(e, config: 0x500fa); |
37 | |
38 | e = &events[1]; |
39 | event_init(e, config: 0x600f4); |
40 | |
41 | e = &events[2]; |
42 | event_init(e, config: 0x22C040); |
43 | |
44 | FAIL_IF(event_open(e: &events[0])); |
45 | |
46 | /* |
47 | * The event_open will fail if constraint check fails. |
48 | * Since we are asking for events in a group and since |
49 | * PMC5/PMC6 is excluded from group constraints, even_open |
50 | * should pass. |
51 | */ |
52 | for (i = 1; i < 3; i++) |
53 | FAIL_IF(event_open_with_group(e: &events[i], group_fd: events[0].fd)); |
54 | |
55 | for (i = 0; i < 3; i++) |
56 | event_close(e: &events[i]); |
57 | |
58 | return 0; |
59 | } |
60 | |
61 | int main(void) |
62 | { |
63 | return test_harness(group_pmc56_exclude_constraints, "group_pmc56_exclude_constraints" ); |
64 | } |
65 | |