1e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
2e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include "parse-events.h"
3e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include "evsel.h"
4e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include "evlist.h"
5e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include "sysfs.h"
6e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include <lk/debugfs.h>
7e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include "tests.h"
8e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include <linux/hw_breakpoint.h>
9e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
10e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_TP_SAMPLE_TYPE (PERF_SAMPLE_RAW | PERF_SAMPLE_TIME | \
11e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			     PERF_SAMPLE_CPU | PERF_SAMPLE_PERIOD)
12e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
13e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_tracepoint(struct perf_evlist *evlist)
14e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
15e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel = perf_evlist__first(evlist);
16e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
17e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
18e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong number of groups", 0 == evlist->nr_groups);
19e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->attr.type);
20e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong sample_type",
21e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		PERF_TP_SAMPLE_TYPE == evsel->attr.sample_type);
22e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->attr.sample_period);
23e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return 0;
24e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
25e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
26e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_tracepoint_multi(struct perf_evlist *evlist)
27e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
28e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel;
29e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
30e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong number of entries", evlist->nr_entries > 1);
31e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong number of groups", 0 == evlist->nr_groups);
32e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
33e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	list_for_each_entry(evsel, &evlist->entries, node) {
34e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		TEST_ASSERT_VAL("wrong type",
35e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			PERF_TYPE_TRACEPOINT == evsel->attr.type);
36e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		TEST_ASSERT_VAL("wrong sample_type",
37e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			PERF_TP_SAMPLE_TYPE == evsel->attr.sample_type);
38e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		TEST_ASSERT_VAL("wrong sample_period",
39e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			1 == evsel->attr.sample_period);
40e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	}
41e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return 0;
42e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
43e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
44e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_raw(struct perf_evlist *evlist)
45e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
46e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel = perf_evlist__first(evlist);
47e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
48e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
49e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type);
50e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config", 0x1a == evsel->attr.config);
51e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return 0;
52e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
53e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
54e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_numeric(struct perf_evlist *evlist)
55e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
56e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel = perf_evlist__first(evlist);
57e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
58e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
59e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", 1 == evsel->attr.type);
60e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config);
61e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return 0;
62e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
63e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
64e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_symbolic_name(struct perf_evlist *evlist)
65e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
66e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel = perf_evlist__first(evlist);
67e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
68e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
69e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
70e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config",
71e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config);
72e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return 0;
73e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
74e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
75e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_symbolic_name_config(struct perf_evlist *evlist)
76e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
77e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel = perf_evlist__first(evlist);
78e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
79e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
80e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
81e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config",
82e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config);
83e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong period",
84e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			100000 == evsel->attr.sample_period);
85e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config1",
86e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			0 == evsel->attr.config1);
87e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config2",
88e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			1 == evsel->attr.config2);
89e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return 0;
90e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
91e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
92e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_symbolic_alias(struct perf_evlist *evlist)
93e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
94e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel = perf_evlist__first(evlist);
95e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
96e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
97e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->attr.type);
98e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config",
99e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			PERF_COUNT_SW_PAGE_FAULTS == evsel->attr.config);
100e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return 0;
101e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
102e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
103e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_genhw(struct perf_evlist *evlist)
104e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
105e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel = perf_evlist__first(evlist);
106e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
107e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
108e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HW_CACHE == evsel->attr.type);
109e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config", (1 << 16) == evsel->attr.config);
110e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return 0;
111e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
112e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
113e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_breakpoint(struct perf_evlist *evlist)
114e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
115e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel = perf_evlist__first(evlist);
116e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
117e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
118e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->attr.type);
119e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config);
120e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) ==
121e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng					 evsel->attr.bp_type);
122e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_4 ==
123e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng					evsel->attr.bp_len);
124e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return 0;
125e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
126e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
127e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_breakpoint_x(struct perf_evlist *evlist)
128e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
129e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel = perf_evlist__first(evlist);
130e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
131e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
132e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->attr.type);
133e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config);
134e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong bp_type",
135e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			HW_BREAKPOINT_X == evsel->attr.bp_type);
136e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong bp_len", sizeof(long) == evsel->attr.bp_len);
137e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return 0;
138e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
139e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
140e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_breakpoint_r(struct perf_evlist *evlist)
141e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
142e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel = perf_evlist__first(evlist);
143e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
144e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
145e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type",
146e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			PERF_TYPE_BREAKPOINT == evsel->attr.type);
147e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config);
148e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong bp_type",
149e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			HW_BREAKPOINT_R == evsel->attr.bp_type);
150e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong bp_len",
151e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			HW_BREAKPOINT_LEN_4 == evsel->attr.bp_len);
152e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return 0;
153e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
154e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
155e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_breakpoint_w(struct perf_evlist *evlist)
156e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
157e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel = perf_evlist__first(evlist);
158e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
159e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
160e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type",
161e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			PERF_TYPE_BREAKPOINT == evsel->attr.type);
162e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config);
163e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong bp_type",
164e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			HW_BREAKPOINT_W == evsel->attr.bp_type);
165e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong bp_len",
166e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			HW_BREAKPOINT_LEN_4 == evsel->attr.bp_len);
167e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return 0;
168e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
169e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
170e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_breakpoint_rw(struct perf_evlist *evlist)
171e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
172e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel = perf_evlist__first(evlist);
173e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
174e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
175e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type",
176e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			PERF_TYPE_BREAKPOINT == evsel->attr.type);
177e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config);
178e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong bp_type",
179e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		(HW_BREAKPOINT_R|HW_BREAKPOINT_W) == evsel->attr.bp_type);
180e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong bp_len",
181e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			HW_BREAKPOINT_LEN_4 == evsel->attr.bp_len);
182e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return 0;
183e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
184e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
185e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_tracepoint_modifier(struct perf_evlist *evlist)
186e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
187e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel = perf_evlist__first(evlist);
188e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
189e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
190e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
191e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
192e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
193e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
194e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return test__checkevent_tracepoint(evlist);
195e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
196e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
197e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int
198e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengtest__checkevent_tracepoint_multi_modifier(struct perf_evlist *evlist)
199e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
200e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel;
201e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
202e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong number of entries", evlist->nr_entries > 1);
203e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
204e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	list_for_each_entry(evsel, &evlist->entries, node) {
205e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		TEST_ASSERT_VAL("wrong exclude_user",
206e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng				!evsel->attr.exclude_user);
207e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		TEST_ASSERT_VAL("wrong exclude_kernel",
208e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng				evsel->attr.exclude_kernel);
209e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
210e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
211e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	}
212e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
213e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return test__checkevent_tracepoint_multi(evlist);
214e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
215e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
216e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_raw_modifier(struct perf_evlist *evlist)
217e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
218e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel = perf_evlist__first(evlist);
219e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
220e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
221e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
222e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
223e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip);
224e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
225e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return test__checkevent_raw(evlist);
226e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
227e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
228e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_numeric_modifier(struct perf_evlist *evlist)
229e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
230e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel = perf_evlist__first(evlist);
231e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
232e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
233e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
234e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
235e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip);
236e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
237e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return test__checkevent_numeric(evlist);
238e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
239e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
240e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_symbolic_name_modifier(struct perf_evlist *evlist)
241e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
242e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel = perf_evlist__first(evlist);
243e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
244e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
245e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
246e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
247e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
248e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
249e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return test__checkevent_symbolic_name(evlist);
250e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
251e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
252e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_exclude_host_modifier(struct perf_evlist *evlist)
253e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
254e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel = perf_evlist__first(evlist);
255e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
256e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
257e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host);
258e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
259e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return test__checkevent_symbolic_name(evlist);
260e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
261e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
262e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_exclude_guest_modifier(struct perf_evlist *evlist)
263e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
264e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel = perf_evlist__first(evlist);
265e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
266e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest);
267e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
268e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
269e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return test__checkevent_symbolic_name(evlist);
270e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
271e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
272e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_symbolic_alias_modifier(struct perf_evlist *evlist)
273e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
274e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel = perf_evlist__first(evlist);
275e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
276e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
277e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
278e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
279e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
280e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
281e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return test__checkevent_symbolic_alias(evlist);
282e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
283e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
284e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_genhw_modifier(struct perf_evlist *evlist)
285e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
286e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel = perf_evlist__first(evlist);
287e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
288e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
289e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
290e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
291e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip);
292e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
293e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return test__checkevent_genhw(evlist);
294e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
295e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
296e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_breakpoint_modifier(struct perf_evlist *evlist)
297e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
298e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel = perf_evlist__first(evlist);
299e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
300e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
301e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
302e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
303e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
304e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
305e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong name",
306e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			!strcmp(perf_evsel__name(evsel), "mem:0:u"));
307e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
308e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return test__checkevent_breakpoint(evlist);
309e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
310e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
311e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_breakpoint_x_modifier(struct perf_evlist *evlist)
312e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
313e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel = perf_evlist__first(evlist);
314e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
315e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
316e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
317e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
318e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
319e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong name",
320e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			!strcmp(perf_evsel__name(evsel), "mem:0:x:k"));
321e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
322e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return test__checkevent_breakpoint_x(evlist);
323e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
324e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
325e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_breakpoint_r_modifier(struct perf_evlist *evlist)
326e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
327e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel = perf_evlist__first(evlist);
328e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
329e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
330e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
331e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
332e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip);
333e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong name",
334e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			!strcmp(perf_evsel__name(evsel), "mem:0:r:hp"));
335e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
336e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return test__checkevent_breakpoint_r(evlist);
337e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
338e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
339e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_breakpoint_w_modifier(struct perf_evlist *evlist)
340e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
341e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel = perf_evlist__first(evlist);
342e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
343e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
344e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
345e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
346e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip);
347e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong name",
348e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			!strcmp(perf_evsel__name(evsel), "mem:0:w:up"));
349e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
350e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return test__checkevent_breakpoint_w(evlist);
351e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
352e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
353e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_breakpoint_rw_modifier(struct perf_evlist *evlist)
354e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
355e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel = perf_evlist__first(evlist);
356e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
357e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
358e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
359e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
360e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip);
361e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong name",
362e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			!strcmp(perf_evsel__name(evsel), "mem:0:rw:kp"));
363e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
364e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return test__checkevent_breakpoint_rw(evlist);
365e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
366e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
367e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_pmu(struct perf_evlist *evlist)
368e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
369e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
370e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel = perf_evlist__first(evlist);
371e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
372e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
373e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type);
374e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config",    10 == evsel->attr.config);
375e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config1",    1 == evsel->attr.config1);
376e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config2",    3 == evsel->attr.config2);
377e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong period",  1000 == evsel->attr.sample_period);
378e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
379e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return 0;
380e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
381e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
382e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_list(struct perf_evlist *evlist)
383e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
384e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel = perf_evlist__first(evlist);
385e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
386e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->nr_entries);
387e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
388e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* r1 */
389e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type);
390e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config);
391e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config1", 0 == evsel->attr.config1);
392e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config2", 0 == evsel->attr.config2);
393e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
394e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
395e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
396e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
397e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
398e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* syscalls:sys_enter_open:k */
399e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	evsel = perf_evsel__next(evsel);
400e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->attr.type);
401e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong sample_type",
402e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		PERF_TP_SAMPLE_TYPE == evsel->attr.sample_type);
403e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->attr.sample_period);
404e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
405e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
406e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
407e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
408e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
409e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* 1:1:hp */
410e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	evsel = perf_evsel__next(evsel);
411e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", 1 == evsel->attr.type);
412e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config);
413e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
414e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
415e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
416e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip);
417e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
418e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return 0;
419e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
420e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
421e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_pmu_name(struct perf_evlist *evlist)
422e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
423e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel = perf_evlist__first(evlist);
424e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
425e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* cpu/config=1,name=krava/u */
426e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries);
427e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type);
428e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config",  1 == evsel->attr.config);
429e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong name", !strcmp(perf_evsel__name(evsel), "krava"));
430e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
431e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* cpu/config=2/u" */
432e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	evsel = perf_evsel__next(evsel);
433e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries);
434e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type);
435e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config",  2 == evsel->attr.config);
436e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong name",
437e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			!strcmp(perf_evsel__name(evsel), "cpu/config=2/u"));
438e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
439e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return 0;
440e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
441e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
442e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_pmu_events(struct perf_evlist *evlist)
443e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
444e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel;
445e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
446e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	evsel = list_entry(evlist->entries.next, struct perf_evsel, node);
447e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
448e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type);
449e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user",
450e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			!evsel->attr.exclude_user);
451e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel",
452e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			evsel->attr.exclude_kernel);
453e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
454e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
455e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong pinned", !evsel->attr.pinned);
456e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
457e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return 0;
458e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
459e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
460e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkterms_simple(struct list_head *terms)
461e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
462e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct parse_events_term *term;
463e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
464e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* config=10 */
465e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	term = list_entry(terms->next, struct parse_events_term, list);
466e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type term",
467e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG);
468e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type val",
469e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
470e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong val", term->val.num == 10);
471e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config", !term->config);
472e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
473e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* config1 */
474e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	term = list_entry(term->list.next, struct parse_events_term, list);
475e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type term",
476e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG1);
477e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type val",
478e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
479e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong val", term->val.num == 1);
480e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config", !term->config);
481e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
482e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* config2=3 */
483e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	term = list_entry(term->list.next, struct parse_events_term, list);
484e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type term",
485e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG2);
486e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type val",
487e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
488e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong val", term->val.num == 3);
489e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config", !term->config);
490e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
491e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* umask=1*/
492e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	term = list_entry(term->list.next, struct parse_events_term, list);
493e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type term",
494e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			term->type_term == PARSE_EVENTS__TERM_TYPE_USER);
495e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type val",
496e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
497e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong val", term->val.num == 1);
498e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "umask"));
499e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
500e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return 0;
501e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
502e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
503e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__group1(struct perf_evlist *evlist)
504e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
505e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel, *leader;
506e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
507e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries);
508e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups);
509e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
510e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* instructions:k */
511e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	evsel = leader = perf_evlist__first(evlist);
512e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
513e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config",
514e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config);
515e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
516e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
517e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
518e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
519e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
520e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
521e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel));
522e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2);
523e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0);
524e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
525e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
526e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* cycles:upp */
527e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	evsel = perf_evsel__next(evsel);
528e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
529e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config",
530e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config);
531e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
532e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
533e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
534e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* use of precise requires exclude_guest */
535e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest);
536e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
537e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 2);
538e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
539e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1);
540e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
541e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
542e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return 0;
543e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
544e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
545e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__group2(struct perf_evlist *evlist)
546e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
547e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel, *leader;
548e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
549e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->nr_entries);
550e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups);
551e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
552e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* faults + :ku modifier */
553e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	evsel = leader = perf_evlist__first(evlist);
554e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->attr.type);
555e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config",
556e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			PERF_COUNT_SW_PAGE_FAULTS == evsel->attr.config);
557e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
558e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
559e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
560e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
561e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
562e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
563e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel));
564e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2);
565e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0);
566e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
567e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
568e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* cache-references + :u modifier */
569e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	evsel = perf_evsel__next(evsel);
570e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
571e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config",
572e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			PERF_COUNT_HW_CACHE_REFERENCES == evsel->attr.config);
573e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
574e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
575e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
576e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest);
577e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
578e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
579e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
580e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1);
581e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
582e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
583e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* cycles:k */
584e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	evsel = perf_evsel__next(evsel);
585e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
586e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config",
587e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config);
588e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
589e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
590e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
591e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
592e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
593e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
594e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel));
595e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
596e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
597e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return 0;
598e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
599e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
600e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__group3(struct perf_evlist *evlist __maybe_unused)
601e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
602e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel, *leader;
603e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
604e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->nr_entries);
605e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong number of groups", 2 == evlist->nr_groups);
606e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
607e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* group1 syscalls:sys_enter_open:H */
608e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	evsel = leader = perf_evlist__first(evlist);
609e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->attr.type);
610e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong sample_type",
611e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		PERF_TP_SAMPLE_TYPE == evsel->attr.sample_type);
612e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->attr.sample_period);
613e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
614e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
615e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
616e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest);
617e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
618e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
619e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel));
620e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong group name",
621e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		!strcmp(leader->group_name, "group1"));
622e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2);
623e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0);
624e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
625e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
626e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* group1 cycles:kppp */
627e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	evsel = perf_evsel__next(evsel);
628e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
629e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config",
630e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config);
631e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
632e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
633e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
634e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* use of precise requires exclude_guest */
635e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest);
636e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
637e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 3);
638e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
639e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
640e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1);
641e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
642e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
643e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* group2 cycles + G modifier */
644e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	evsel = leader = perf_evsel__next(evsel);
645e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
646e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config",
647e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config);
648e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
649e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
650e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
651e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
652e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host);
653e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
654e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel));
655e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong group name",
656e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		!strcmp(leader->group_name, "group2"));
657e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2);
658e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0);
659e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
660e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
661e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* group2 1:3 + G modifier */
662e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	evsel = perf_evsel__next(evsel);
663e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", 1 == evsel->attr.type);
664e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config", 3 == evsel->attr.config);
665e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
666e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
667e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
668e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
669e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host);
670e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
671e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
672e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1);
673e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
674e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
675e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* instructions:u */
676e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	evsel = perf_evsel__next(evsel);
677e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
678e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config",
679e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config);
680e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
681e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
682e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
683e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
684e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
685e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
686e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel));
687e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
688e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
689e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return 0;
690e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
691e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
692e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__group4(struct perf_evlist *evlist __maybe_unused)
693e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
694e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel, *leader;
695e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
696e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries);
697e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups);
698e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
699e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* cycles:u + p */
700e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	evsel = leader = perf_evlist__first(evlist);
701e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
702e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config",
703e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config);
704e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
705e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
706e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
707e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* use of precise requires exclude_guest */
708e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest);
709e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
710e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 1);
711e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
712e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel));
713e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2);
714e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0);
715e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
716e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
717e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* instructions:kp + p */
718e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	evsel = perf_evsel__next(evsel);
719e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
720e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config",
721e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config);
722e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
723e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
724e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
725e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* use of precise requires exclude_guest */
726e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest);
727e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
728e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 2);
729e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
730e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1);
731e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
732e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
733e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return 0;
734e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
735e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
736e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__group5(struct perf_evlist *evlist __maybe_unused)
737e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
738e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel, *leader;
739e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
740e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->nr_entries);
741e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong number of groups", 2 == evlist->nr_groups);
742e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
743e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* cycles + G */
744e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	evsel = leader = perf_evlist__first(evlist);
745e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
746e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config",
747e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config);
748e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
749e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
750e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
751e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
752e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host);
753e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
754e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
755e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel));
756e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2);
757e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0);
758e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
759e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
760e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* instructions + G */
761e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	evsel = perf_evsel__next(evsel);
762e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
763e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config",
764e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config);
765e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
766e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
767e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
768e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
769e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host);
770e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
771e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
772e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1);
773e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
774e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
775e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* cycles:G */
776e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	evsel = leader = perf_evsel__next(evsel);
777e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
778e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config",
779e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config);
780e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
781e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
782e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
783e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
784e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host);
785e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
786e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
787e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel));
788e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2);
789e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0);
790e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
791e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
792e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* instructions:G */
793e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	evsel = perf_evsel__next(evsel);
794e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
795e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config",
796e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config);
797e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
798e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
799e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
800e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
801e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host);
802e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
803e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
804e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1);
805e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
806e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* cycles */
807e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	evsel = perf_evsel__next(evsel);
808e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
809e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config",
810e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config);
811e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
812e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
813e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
814e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest);
815e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
816e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
817e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel));
818e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
819e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return 0;
820e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
821e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
822e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__group_gh1(struct perf_evlist *evlist)
823e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
824e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel, *leader;
825e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
826e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries);
827e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups);
828e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
829e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* cycles + :H group modifier */
830e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	evsel = leader = perf_evlist__first(evlist);
831e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
832e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config",
833e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config);
834e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
835e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
836e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
837e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest);
838e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
839e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
840e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
841e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel));
842e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2);
843e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0);
844e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
845e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* cache-misses:G + :H group modifier */
846e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	evsel = perf_evsel__next(evsel);
847e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
848e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config",
849e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			PERF_COUNT_HW_CACHE_MISSES == evsel->attr.config);
850e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
851e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
852e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
853e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
854e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
855e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
856e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
857e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1);
858e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
859e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return 0;
860e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
861e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
862e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__group_gh2(struct perf_evlist *evlist)
863e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
864e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel, *leader;
865e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
866e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries);
867e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups);
868e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
869e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* cycles + :G group modifier */
870e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	evsel = leader = perf_evlist__first(evlist);
871e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
872e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config",
873e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config);
874e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
875e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
876e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
877e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
878e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host);
879e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
880e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
881e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel));
882e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2);
883e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0);
884e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
885e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* cache-misses:H + :G group modifier */
886e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	evsel = perf_evsel__next(evsel);
887e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
888e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config",
889e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			PERF_COUNT_HW_CACHE_MISSES == evsel->attr.config);
890e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
891e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
892e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
893e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
894e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
895e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
896e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
897e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1);
898e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
899e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return 0;
900e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
901e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
902e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__group_gh3(struct perf_evlist *evlist)
903e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
904e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel, *leader;
905e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
906e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries);
907e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups);
908e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
909e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* cycles:G + :u group modifier */
910e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	evsel = leader = perf_evlist__first(evlist);
911e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
912e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config",
913e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config);
914e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
915e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
916e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
917e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
918e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host);
919e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
920e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
921e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel));
922e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2);
923e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0);
924e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
925e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* cache-misses:H + :u group modifier */
926e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	evsel = perf_evsel__next(evsel);
927e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
928e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config",
929e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			PERF_COUNT_HW_CACHE_MISSES == evsel->attr.config);
930e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
931e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
932e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
933e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest);
934e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
935e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
936e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
937e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1);
938e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
939e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return 0;
940e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
941e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
942e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__group_gh4(struct perf_evlist *evlist)
943e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
944e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel, *leader;
945e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
946e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries);
947e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups);
948e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
949e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* cycles:G + :uG group modifier */
950e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	evsel = leader = perf_evlist__first(evlist);
951e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
952e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config",
953e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config);
954e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
955e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
956e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
957e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
958e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host);
959e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
960e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
961e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel));
962e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2);
963e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0);
964e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
965e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* cache-misses:H + :uG group modifier */
966e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	evsel = perf_evsel__next(evsel);
967e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
968e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config",
969e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			PERF_COUNT_HW_CACHE_MISSES == evsel->attr.config);
970e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
971e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
972e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
973e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
974e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
975e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
976e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
977e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1);
978e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
979e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return 0;
980e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
981e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
982e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__leader_sample1(struct perf_evlist *evlist)
983e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
984e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel, *leader;
985e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
986e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->nr_entries);
987e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
988e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* cycles - sampling group leader */
989e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	evsel = leader = perf_evlist__first(evlist);
990e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
991e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config",
992e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config);
993e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
994e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
995e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
996e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest);
997e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
998e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
999e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1000e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
1001e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1002e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1003e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* cache-misses - not sampling */
1004e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	evsel = perf_evsel__next(evsel);
1005e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
1006e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config",
1007e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			PERF_COUNT_HW_CACHE_MISSES == evsel->attr.config);
1008e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
1009e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
1010e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
1011e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest);
1012e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
1013e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
1014e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
1015e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1016e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1017e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* branch-misses - not sampling */
1018e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	evsel = perf_evsel__next(evsel);
1019e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
1020e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config",
1021e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			PERF_COUNT_HW_BRANCH_MISSES == evsel->attr.config);
1022e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
1023e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
1024e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
1025e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest);
1026e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
1027e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
1028e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1029e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
1030e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1031e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1032e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return 0;
1033e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
1034e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1035e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__leader_sample2(struct perf_evlist *evlist __maybe_unused)
1036e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
1037e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel, *leader;
1038e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1039e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries);
1040e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1041e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* instructions - sampling group leader */
1042e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	evsel = leader = perf_evlist__first(evlist);
1043e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
1044e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config",
1045e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config);
1046e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
1047e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
1048e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
1049e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest);
1050e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
1051e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
1052e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1053e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
1054e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1055e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1056e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* branch-misses - not sampling */
1057e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	evsel = perf_evsel__next(evsel);
1058e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
1059e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config",
1060e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			PERF_COUNT_HW_BRANCH_MISSES == evsel->attr.config);
1061e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
1062e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
1063e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
1064e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest);
1065e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
1066e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
1067e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1068e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
1069e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1070e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1071e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return 0;
1072e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
1073e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1074e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_pinned_modifier(struct perf_evlist *evlist)
1075e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
1076e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel = perf_evlist__first(evlist);
1077e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1078e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
1079e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
1080e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
1081e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip);
1082e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong pinned", evsel->attr.pinned);
1083e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1084e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return test__checkevent_symbolic_name(evlist);
1085e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
1086e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1087e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__pinned_group(struct perf_evlist *evlist)
1088e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
1089e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evsel *evsel, *leader;
1090e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1091e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->nr_entries);
1092e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1093e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* cycles - group leader */
1094e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	evsel = leader = perf_evlist__first(evlist);
1095e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
1096e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config",
1097e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config);
1098e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1099e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
1100e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong pinned", evsel->attr.pinned);
1101e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1102e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* cache-misses - can not be pinned, but will go on with the leader */
1103e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	evsel = perf_evsel__next(evsel);
1104e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
1105e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config",
1106e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			PERF_COUNT_HW_CACHE_MISSES == evsel->attr.config);
1107e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong pinned", !evsel->attr.pinned);
1108e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1109e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	/* branch-misses - ditto */
1110e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	evsel = perf_evsel__next(evsel);
1111e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong config",
1112e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			PERF_COUNT_HW_BRANCH_MISSES == evsel->attr.config);
1113e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong pinned", !evsel->attr.pinned);
1114e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1115e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return 0;
1116e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
1117e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1118e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int count_tracepoints(void)
1119e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
1120e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	char events_path[PATH_MAX];
1121e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct dirent *events_ent;
1122e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	DIR *events_dir;
1123e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	int cnt = 0;
1124e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1125e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	scnprintf(events_path, PATH_MAX, "%s/tracing/events",
1126e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		  debugfs_find_mountpoint());
1127e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1128e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	events_dir = opendir(events_path);
1129e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1130e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("Can't open events dir", events_dir);
1131e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1132e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	while ((events_ent = readdir(events_dir))) {
1133e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		char sys_path[PATH_MAX];
1134e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		struct dirent *sys_ent;
1135e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		DIR *sys_dir;
1136e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1137e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		if (!strcmp(events_ent->d_name, ".")
1138e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		    || !strcmp(events_ent->d_name, "..")
1139e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		    || !strcmp(events_ent->d_name, "enable")
1140e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		    || !strcmp(events_ent->d_name, "header_event")
1141e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		    || !strcmp(events_ent->d_name, "header_page"))
1142e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			continue;
1143e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1144e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		scnprintf(sys_path, PATH_MAX, "%s/%s",
1145e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			  events_path, events_ent->d_name);
1146e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1147e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		sys_dir = opendir(sys_path);
1148e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		TEST_ASSERT_VAL("Can't open sys dir", sys_dir);
1149e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1150e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		while ((sys_ent = readdir(sys_dir))) {
1151e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			if (!strcmp(sys_ent->d_name, ".")
1152e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			    || !strcmp(sys_ent->d_name, "..")
1153e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			    || !strcmp(sys_ent->d_name, "enable")
1154e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			    || !strcmp(sys_ent->d_name, "filter"))
1155e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng				continue;
1156e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1157e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			cnt++;
1158e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		}
1159e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1160e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		closedir(sys_dir);
1161e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	}
1162e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1163e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	closedir(events_dir);
1164e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return cnt;
1165e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
1166e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1167e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__all_tracepoints(struct perf_evlist *evlist)
1168e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
1169e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_ASSERT_VAL("wrong events count",
1170e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			count_tracepoints() == evlist->nr_entries);
1171e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1172e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return test__checkevent_tracepoint_multi(evlist);
1173e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
1174e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1175e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct evlist_test {
1176e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	const char *name;
1177e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	__u32 type;
1178e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	int (*check)(struct perf_evlist *evlist);
1179e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng};
1180e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1181e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic struct evlist_test test__events[] = {
1182e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[0] = {
1183e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "syscalls:sys_enter_open",
1184e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__checkevent_tracepoint,
1185e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1186e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[1] = {
1187e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "syscalls:*",
1188e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__checkevent_tracepoint_multi,
1189e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1190e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[2] = {
1191e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "r1a",
1192e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__checkevent_raw,
1193e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1194e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[3] = {
1195e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "1:1",
1196e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__checkevent_numeric,
1197e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1198e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[4] = {
1199e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "instructions",
1200e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__checkevent_symbolic_name,
1201e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1202e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[5] = {
1203e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "cycles/period=100000,config2/",
1204e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__checkevent_symbolic_name_config,
1205e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1206e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[6] = {
1207e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "faults",
1208e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__checkevent_symbolic_alias,
1209e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1210e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[7] = {
1211e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "L1-dcache-load-miss",
1212e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__checkevent_genhw,
1213e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1214e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[8] = {
1215e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "mem:0",
1216e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__checkevent_breakpoint,
1217e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1218e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[9] = {
1219e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "mem:0:x",
1220e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__checkevent_breakpoint_x,
1221e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1222e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[10] = {
1223e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "mem:0:r",
1224e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__checkevent_breakpoint_r,
1225e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1226e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[11] = {
1227e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "mem:0:w",
1228e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__checkevent_breakpoint_w,
1229e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1230e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[12] = {
1231e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "syscalls:sys_enter_open:k",
1232e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__checkevent_tracepoint_modifier,
1233e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1234e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[13] = {
1235e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "syscalls:*:u",
1236e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__checkevent_tracepoint_multi_modifier,
1237e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1238e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[14] = {
1239e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "r1a:kp",
1240e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__checkevent_raw_modifier,
1241e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1242e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[15] = {
1243e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "1:1:hp",
1244e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__checkevent_numeric_modifier,
1245e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1246e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[16] = {
1247e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "instructions:h",
1248e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__checkevent_symbolic_name_modifier,
1249e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1250e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[17] = {
1251e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "faults:u",
1252e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__checkevent_symbolic_alias_modifier,
1253e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1254e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[18] = {
1255e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "L1-dcache-load-miss:kp",
1256e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__checkevent_genhw_modifier,
1257e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1258e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[19] = {
1259e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "mem:0:u",
1260e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__checkevent_breakpoint_modifier,
1261e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1262e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[20] = {
1263e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "mem:0:x:k",
1264e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__checkevent_breakpoint_x_modifier,
1265e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1266e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[21] = {
1267e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "mem:0:r:hp",
1268e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__checkevent_breakpoint_r_modifier,
1269e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1270e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[22] = {
1271e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "mem:0:w:up",
1272e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__checkevent_breakpoint_w_modifier,
1273e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1274e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[23] = {
1275e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "r1,syscalls:sys_enter_open:k,1:1:hp",
1276e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__checkevent_list,
1277e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1278e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[24] = {
1279e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "instructions:G",
1280e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__checkevent_exclude_host_modifier,
1281e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1282e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[25] = {
1283e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "instructions:H",
1284e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__checkevent_exclude_guest_modifier,
1285e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1286e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[26] = {
1287e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "mem:0:rw",
1288e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__checkevent_breakpoint_rw,
1289e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1290e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[27] = {
1291e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "mem:0:rw:kp",
1292e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__checkevent_breakpoint_rw_modifier,
1293e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1294e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[28] = {
1295e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "{instructions:k,cycles:upp}",
1296e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__group1,
1297e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1298e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[29] = {
1299e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "{faults:k,cache-references}:u,cycles:k",
1300e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__group2,
1301e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1302e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[30] = {
1303e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "group1{syscalls:sys_enter_open:H,cycles:kppp},group2{cycles,1:3}:G,instructions:u",
1304e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__group3,
1305e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1306e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[31] = {
1307e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "{cycles:u,instructions:kp}:p",
1308e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__group4,
1309e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1310e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[32] = {
1311e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "{cycles,instructions}:G,{cycles:G,instructions:G},cycles",
1312e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__group5,
1313e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1314e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[33] = {
1315e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "*:*",
1316e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__all_tracepoints,
1317e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1318e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[34] = {
1319e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "{cycles,cache-misses:G}:H",
1320e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__group_gh1,
1321e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1322e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[35] = {
1323e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "{cycles,cache-misses:H}:G",
1324e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__group_gh2,
1325e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1326e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[36] = {
1327e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "{cycles:G,cache-misses:H}:u",
1328e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__group_gh3,
1329e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1330e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[37] = {
1331e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "{cycles:G,cache-misses:H}:uG",
1332e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__group_gh4,
1333e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1334e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[38] = {
1335e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "{cycles,cache-misses,branch-misses}:S",
1336e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__leader_sample1,
1337e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1338e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[39] = {
1339e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "{instructions,branch-misses}:Su",
1340e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__leader_sample2,
1341e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1342e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[40] = {
1343e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "instructions:uDp",
1344e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__checkevent_pinned_modifier,
1345e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1346e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[41] = {
1347e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "{cycles,cache-misses,branch-misses}:D",
1348e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__pinned_group,
1349e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1350e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng};
1351e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1352e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic struct evlist_test test__events_pmu[] = {
1353e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[0] = {
1354e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "cpu/config=10,config1,config2=3,period=1000/u",
1355e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__checkevent_pmu,
1356e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1357e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[1] = {
1358e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.name  = "cpu/config=1,name=krava/u,cpu/config=2/u",
1359e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__checkevent_pmu_name,
1360e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1361e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng};
1362e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1363e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct terms_test {
1364e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	const char *str;
1365e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	__u32 type;
1366e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	int (*check)(struct list_head *terms);
1367e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng};
1368e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1369e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic struct terms_test test__terms[] = {
1370e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	[0] = {
1371e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.str   = "config=10,config1,config2=3,umask=1",
1372e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		.check = test__checkterms_simple,
1373e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	},
1374e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng};
1375e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1376e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test_event(struct evlist_test *e)
1377e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
1378e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct perf_evlist *evlist;
1379e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	int ret;
1380e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1381e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	evlist = perf_evlist__new();
1382e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	if (evlist == NULL)
1383e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		return -ENOMEM;
1384e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1385e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	ret = parse_events(evlist, e->name);
1386e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	if (ret) {
1387e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		pr_debug("failed to parse event '%s', err %d\n",
1388e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			 e->name, ret);
1389e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		return ret;
1390e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	}
1391e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1392e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	ret = e->check(evlist);
1393e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	perf_evlist__delete(evlist);
1394e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1395e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return ret;
1396e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
1397e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1398e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test_events(struct evlist_test *events, unsigned cnt)
1399e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
1400e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	int ret1, ret2 = 0;
1401e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	unsigned i;
1402e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1403e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	for (i = 0; i < cnt; i++) {
1404e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		struct evlist_test *e = &events[i];
1405e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1406e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		pr_debug("running test %d '%s'\n", i, e->name);
1407e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		ret1 = test_event(e);
1408e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		if (ret1)
1409e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			ret2 = ret1;
1410e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	}
1411e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1412e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return ret2;
1413e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
1414e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1415e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test_term(struct terms_test *t)
1416e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
1417e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct list_head terms;
1418e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	int ret;
1419e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1420e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	INIT_LIST_HEAD(&terms);
1421e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1422e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	ret = parse_events_terms(&terms, t->str);
1423e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	if (ret) {
1424e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		pr_debug("failed to parse terms '%s', err %d\n",
1425e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			 t->str , ret);
1426e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		return ret;
1427e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	}
1428e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1429e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	ret = t->check(&terms);
1430e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	parse_events__free_terms(&terms);
1431e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1432e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return ret;
1433e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
1434e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1435e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test_terms(struct terms_test *terms, unsigned cnt)
1436e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
1437e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	int ret = 0;
1438e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	unsigned i;
1439e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1440e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	for (i = 0; i < cnt; i++) {
1441e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		struct terms_test *t = &terms[i];
1442e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1443e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		pr_debug("running test %d '%s'\n", i, t->str);
1444e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		ret = test_term(t);
1445e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		if (ret)
1446e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			break;
1447e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	}
1448e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1449e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return ret;
1450e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
1451e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1452e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test_pmu(void)
1453e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
1454e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct stat st;
1455e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	char path[PATH_MAX];
1456e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	int ret;
1457e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1458e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/format/",
1459e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		 sysfs_find_mountpoint());
1460e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1461e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	ret = stat(path, &st);
1462e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	if (ret)
1463e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		pr_debug("omitting PMU cpu tests\n");
1464e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return !ret;
1465e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
1466e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1467e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test_pmu_events(void)
1468e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
1469e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct stat st;
1470e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	char path[PATH_MAX];
1471e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct dirent *ent;
1472e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	DIR *dir;
1473e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	int ret;
1474e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1475e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/events/",
1476e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		 sysfs_find_mountpoint());
1477e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1478e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	ret = stat(path, &st);
1479e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	if (ret) {
1480e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		pr_debug("omitting PMU cpu events tests\n");
1481e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		return 0;
1482e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	}
1483e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1484e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	dir = opendir(path);
1485e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	if (!dir) {
1486e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		pr_debug("can't open pmu event dir");
1487e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		return -1;
1488e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	}
1489e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1490e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	while (!ret && (ent = readdir(dir))) {
1491e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define MAX_NAME 100
1492e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		struct evlist_test e;
1493e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		char name[MAX_NAME];
1494e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1495e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		if (!strcmp(ent->d_name, ".") ||
1496e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		    !strcmp(ent->d_name, ".."))
1497e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			continue;
1498e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1499e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		snprintf(name, MAX_NAME, "cpu/event=%s/u", ent->d_name);
1500e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1501e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		e.name  = name;
1502e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		e.check = test__checkevent_pmu_events;
1503e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1504e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		ret = test_event(&e);
1505e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#undef MAX_NAME
1506e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	}
1507e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1508e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	closedir(dir);
1509e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return ret;
1510e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
1511e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1512e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint test__parse_events(void)
1513e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
1514e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	int ret1, ret2 = 0;
1515e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1516e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define TEST_EVENTS(tests)				\
1517e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengdo {							\
1518e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	ret1 = test_events(tests, ARRAY_SIZE(tests));	\
1519e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	if (!ret2)					\
1520e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		ret2 = ret1;				\
1521e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} while (0)
1522e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1523e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	TEST_EVENTS(test__events);
1524e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1525e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	if (test_pmu())
1526e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		TEST_EVENTS(test__events_pmu);
1527e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1528e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	if (test_pmu()) {
1529e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		int ret = test_pmu_events();
1530e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		if (ret)
1531e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng			return ret;
1532e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	}
1533e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1534e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	ret1 = test_terms(test__terms, ARRAY_SIZE(test__terms));
1535e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	if (!ret2)
1536e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		ret2 = ret1;
1537e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
1538e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return ret2;
1539e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
1540