Linux Audio

Check our new training course

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