Linux Audio

Check our new training course

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