Linux-libre 4.4.228-gnu
[librecmc/linux-libre.git] / tools / testing / selftests / powerpc / pmu / ebb / event_attributes_test.c
1 /*
2  * Copyright 2014, Michael Ellerman, IBM Corp.
3  * Licensed under GPLv2.
4  */
5
6 #include <stdio.h>
7 #include <stdlib.h>
8
9 #include "ebb.h"
10
11
12 /*
13  * Test various attributes of the EBB event are enforced.
14  */
15 int event_attributes(void)
16 {
17         struct event event, leader;
18
19         SKIP_IF(!ebb_is_supported());
20
21         event_init(&event, 0x1001e);
22         event_leader_ebb_init(&event);
23         /* Expected to succeed */
24         FAIL_IF(event_open(&event));
25         event_close(&event);
26
27
28         event_init(&event, 0x001e); /* CYCLES - no PMC specified */
29         event_leader_ebb_init(&event);
30         /* Expected to fail, no PMC specified */
31         FAIL_IF(event_open(&event) == 0);
32
33
34         event_init(&event, 0x2001e);
35         event_leader_ebb_init(&event);
36         event.attr.exclusive = 0;
37         /* Expected to fail, not exclusive */
38         FAIL_IF(event_open(&event) == 0);
39
40
41         event_init(&event, 0x3001e);
42         event_leader_ebb_init(&event);
43         event.attr.freq = 1;
44         /* Expected to fail, sets freq */
45         FAIL_IF(event_open(&event) == 0);
46
47
48         event_init(&event, 0x4001e);
49         event_leader_ebb_init(&event);
50         event.attr.sample_period = 1;
51         /* Expected to fail, sets sample_period */
52         FAIL_IF(event_open(&event) == 0);
53
54
55         event_init(&event, 0x1001e);
56         event_leader_ebb_init(&event);
57         event.attr.enable_on_exec = 1;
58         /* Expected to fail, sets enable_on_exec */
59         FAIL_IF(event_open(&event) == 0);
60
61
62         event_init(&event, 0x1001e);
63         event_leader_ebb_init(&event);
64         event.attr.inherit = 1;
65         /* Expected to fail, sets inherit */
66         FAIL_IF(event_open(&event) == 0);
67
68
69         event_init(&leader, 0x1001e);
70         event_leader_ebb_init(&leader);
71         FAIL_IF(event_open(&leader));
72
73         event_init(&event, 0x20002);
74         event_ebb_init(&event);
75
76         /* Expected to succeed */
77         FAIL_IF(event_open_with_group(&event, leader.fd));
78         event_close(&leader);
79         event_close(&event);
80
81
82         event_init(&leader, 0x1001e);
83         event_leader_ebb_init(&leader);
84         FAIL_IF(event_open(&leader));
85
86         event_init(&event, 0x20002);
87
88         /* Expected to fail, event doesn't request EBB, leader does */
89         FAIL_IF(event_open_with_group(&event, leader.fd) == 0);
90         event_close(&leader);
91
92
93         event_init(&leader, 0x1001e);
94         event_leader_ebb_init(&leader);
95         /* Clear the EBB flag */
96         leader.attr.config &= ~(1ull << 63);
97
98         FAIL_IF(event_open(&leader));
99
100         event_init(&event, 0x20002);
101         event_ebb_init(&event);
102
103         /* Expected to fail, leader doesn't request EBB */
104         FAIL_IF(event_open_with_group(&event, leader.fd) == 0);
105         event_close(&leader);
106
107
108         event_init(&leader, 0x1001e);
109         event_leader_ebb_init(&leader);
110         leader.attr.exclusive = 0;
111         /* Expected to fail, leader isn't exclusive */
112         FAIL_IF(event_open(&leader) == 0);
113
114
115         event_init(&leader, 0x1001e);
116         event_leader_ebb_init(&leader);
117         leader.attr.pinned = 0;
118         /* Expected to fail, leader isn't pinned */
119         FAIL_IF(event_open(&leader) == 0);
120
121         event_init(&event, 0x1001e);
122         event_leader_ebb_init(&event);
123         /* Expected to fail, not a task event */
124         SKIP_IF(require_paranoia_below(1));
125         FAIL_IF(event_open_with_cpu(&event, 0) == 0);
126
127         return 0;
128 }
129
130 int main(void)
131 {
132         return test_harness(event_attributes, "event_attributes");
133 }