1945aea22SJiri Olsa 2945aea22SJiri Olsa #include "parse-events.h" 3945aea22SJiri Olsa #include "evsel.h" 4945aea22SJiri Olsa #include "evlist.h" 5945aea22SJiri Olsa #include "sysfs.h" 682ce75d9SJiri Olsa #include "debugfs.h" 7c81251e8SJiri Olsa #include "tests.h" 8f0b9abfbSIngo Molnar #include <linux/hw_breakpoint.h> 9945aea22SJiri Olsa 10945aea22SJiri Olsa #define TEST_ASSERT_VAL(text, cond) \ 11945aea22SJiri Olsa do { \ 12945aea22SJiri Olsa if (!(cond)) { \ 13945aea22SJiri Olsa pr_debug("FAILED %s:%d %s\n", __FILE__, __LINE__, text); \ 14945aea22SJiri Olsa return -1; \ 15945aea22SJiri Olsa } \ 16945aea22SJiri Olsa } while (0) 17945aea22SJiri Olsa 18945aea22SJiri Olsa #define PERF_TP_SAMPLE_TYPE (PERF_SAMPLE_RAW | PERF_SAMPLE_TIME | \ 19945aea22SJiri Olsa PERF_SAMPLE_CPU | PERF_SAMPLE_PERIOD) 20945aea22SJiri Olsa 21945aea22SJiri Olsa static int test__checkevent_tracepoint(struct perf_evlist *evlist) 22945aea22SJiri Olsa { 23945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 24945aea22SJiri Olsa 25945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 268d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong number of groups", 0 == evlist->nr_groups); 27945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->attr.type); 28945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 29945aea22SJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->attr.sample_type); 30945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->attr.sample_period); 31945aea22SJiri Olsa return 0; 32945aea22SJiri Olsa } 33945aea22SJiri Olsa 34945aea22SJiri Olsa static int test__checkevent_tracepoint_multi(struct perf_evlist *evlist) 35945aea22SJiri Olsa { 36945aea22SJiri Olsa struct perf_evsel *evsel; 37945aea22SJiri Olsa 38945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", evlist->nr_entries > 1); 398d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong number of groups", 0 == evlist->nr_groups); 40945aea22SJiri Olsa 41945aea22SJiri Olsa list_for_each_entry(evsel, &evlist->entries, node) { 42945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 43945aea22SJiri Olsa PERF_TYPE_TRACEPOINT == evsel->attr.type); 44945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 45945aea22SJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->attr.sample_type); 46945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 47945aea22SJiri Olsa 1 == evsel->attr.sample_period); 48945aea22SJiri Olsa } 49945aea22SJiri Olsa return 0; 50945aea22SJiri Olsa } 51945aea22SJiri Olsa 52945aea22SJiri Olsa static int test__checkevent_raw(struct perf_evlist *evlist) 53945aea22SJiri Olsa { 54945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 55945aea22SJiri Olsa 56945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 57945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); 58945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 0x1a == evsel->attr.config); 59945aea22SJiri Olsa return 0; 60945aea22SJiri Olsa } 61945aea22SJiri Olsa 62945aea22SJiri Olsa static int test__checkevent_numeric(struct perf_evlist *evlist) 63945aea22SJiri Olsa { 64945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 65945aea22SJiri Olsa 66945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 67945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->attr.type); 68945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config); 69945aea22SJiri Olsa return 0; 70945aea22SJiri Olsa } 71945aea22SJiri Olsa 72945aea22SJiri Olsa static int test__checkevent_symbolic_name(struct perf_evlist *evlist) 73945aea22SJiri Olsa { 74945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 75945aea22SJiri Olsa 76945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 77945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 78945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 79945aea22SJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); 80945aea22SJiri Olsa return 0; 81945aea22SJiri Olsa } 82945aea22SJiri Olsa 83945aea22SJiri Olsa static int test__checkevent_symbolic_name_config(struct perf_evlist *evlist) 84945aea22SJiri Olsa { 85945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 86945aea22SJiri Olsa 87945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 88945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 89945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 90945aea22SJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 91945aea22SJiri Olsa TEST_ASSERT_VAL("wrong period", 92945aea22SJiri Olsa 100000 == evsel->attr.sample_period); 93945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config1", 94945aea22SJiri Olsa 0 == evsel->attr.config1); 95945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config2", 96945aea22SJiri Olsa 1 == evsel->attr.config2); 97945aea22SJiri Olsa return 0; 98945aea22SJiri Olsa } 99945aea22SJiri Olsa 100945aea22SJiri Olsa static int test__checkevent_symbolic_alias(struct perf_evlist *evlist) 101945aea22SJiri Olsa { 102945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 103945aea22SJiri Olsa 104945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 105945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->attr.type); 106945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 107945aea22SJiri Olsa PERF_COUNT_SW_PAGE_FAULTS == evsel->attr.config); 108945aea22SJiri Olsa return 0; 109945aea22SJiri Olsa } 110945aea22SJiri Olsa 111945aea22SJiri Olsa static int test__checkevent_genhw(struct perf_evlist *evlist) 112945aea22SJiri Olsa { 113945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 114945aea22SJiri Olsa 115945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 116945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HW_CACHE == evsel->attr.type); 117945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", (1 << 16) == evsel->attr.config); 118945aea22SJiri Olsa return 0; 119945aea22SJiri Olsa } 120945aea22SJiri Olsa 121945aea22SJiri Olsa static int test__checkevent_breakpoint(struct perf_evlist *evlist) 122945aea22SJiri Olsa { 123945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 124945aea22SJiri Olsa 125945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 126945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->attr.type); 127945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config); 128945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) == 129945aea22SJiri Olsa evsel->attr.bp_type); 130945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_4 == 131945aea22SJiri Olsa evsel->attr.bp_len); 132945aea22SJiri Olsa return 0; 133945aea22SJiri Olsa } 134945aea22SJiri Olsa 135945aea22SJiri Olsa static int test__checkevent_breakpoint_x(struct perf_evlist *evlist) 136945aea22SJiri Olsa { 137945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 138945aea22SJiri Olsa 139945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 140945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->attr.type); 141945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config); 142945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 143945aea22SJiri Olsa HW_BREAKPOINT_X == evsel->attr.bp_type); 144945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", sizeof(long) == evsel->attr.bp_len); 145945aea22SJiri Olsa return 0; 146945aea22SJiri Olsa } 147945aea22SJiri Olsa 148945aea22SJiri Olsa static int test__checkevent_breakpoint_r(struct perf_evlist *evlist) 149945aea22SJiri Olsa { 150945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 151945aea22SJiri Olsa 152945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 153945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 154945aea22SJiri Olsa PERF_TYPE_BREAKPOINT == evsel->attr.type); 155945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config); 156945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 157945aea22SJiri Olsa HW_BREAKPOINT_R == evsel->attr.bp_type); 158945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", 159945aea22SJiri Olsa HW_BREAKPOINT_LEN_4 == evsel->attr.bp_len); 160945aea22SJiri Olsa return 0; 161945aea22SJiri Olsa } 162945aea22SJiri Olsa 163945aea22SJiri Olsa static int test__checkevent_breakpoint_w(struct perf_evlist *evlist) 164945aea22SJiri Olsa { 165945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 166945aea22SJiri Olsa 167945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 168945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 169945aea22SJiri Olsa PERF_TYPE_BREAKPOINT == evsel->attr.type); 170945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config); 171945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 172945aea22SJiri Olsa HW_BREAKPOINT_W == evsel->attr.bp_type); 173945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", 174945aea22SJiri Olsa HW_BREAKPOINT_LEN_4 == evsel->attr.bp_len); 175945aea22SJiri Olsa return 0; 176945aea22SJiri Olsa } 177945aea22SJiri Olsa 178945aea22SJiri Olsa static int test__checkevent_breakpoint_rw(struct perf_evlist *evlist) 179945aea22SJiri Olsa { 180945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 181945aea22SJiri Olsa 182945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 183945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 184945aea22SJiri Olsa PERF_TYPE_BREAKPOINT == evsel->attr.type); 185945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config); 186945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 187945aea22SJiri Olsa (HW_BREAKPOINT_R|HW_BREAKPOINT_W) == evsel->attr.bp_type); 188945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", 189945aea22SJiri Olsa HW_BREAKPOINT_LEN_4 == evsel->attr.bp_len); 190945aea22SJiri Olsa return 0; 191945aea22SJiri Olsa } 192945aea22SJiri Olsa 193945aea22SJiri Olsa static int test__checkevent_tracepoint_modifier(struct perf_evlist *evlist) 194945aea22SJiri Olsa { 195945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 196945aea22SJiri Olsa 197945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 198945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 199945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 200945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 201945aea22SJiri Olsa 202945aea22SJiri Olsa return test__checkevent_tracepoint(evlist); 203945aea22SJiri Olsa } 204945aea22SJiri Olsa 205945aea22SJiri Olsa static int 206945aea22SJiri Olsa test__checkevent_tracepoint_multi_modifier(struct perf_evlist *evlist) 207945aea22SJiri Olsa { 208945aea22SJiri Olsa struct perf_evsel *evsel; 209945aea22SJiri Olsa 210945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", evlist->nr_entries > 1); 211945aea22SJiri Olsa 212945aea22SJiri Olsa list_for_each_entry(evsel, &evlist->entries, node) { 213945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", 214945aea22SJiri Olsa !evsel->attr.exclude_user); 215945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", 216945aea22SJiri Olsa evsel->attr.exclude_kernel); 217945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 218945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 219945aea22SJiri Olsa } 220945aea22SJiri Olsa 221945aea22SJiri Olsa return test__checkevent_tracepoint_multi(evlist); 222945aea22SJiri Olsa } 223945aea22SJiri Olsa 224945aea22SJiri Olsa static int test__checkevent_raw_modifier(struct perf_evlist *evlist) 225945aea22SJiri Olsa { 226945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 227945aea22SJiri Olsa 228945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 229945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 230945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 231945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 232945aea22SJiri Olsa 233945aea22SJiri Olsa return test__checkevent_raw(evlist); 234945aea22SJiri Olsa } 235945aea22SJiri Olsa 236945aea22SJiri Olsa static int test__checkevent_numeric_modifier(struct perf_evlist *evlist) 237945aea22SJiri Olsa { 238945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 239945aea22SJiri Olsa 240945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 241945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 242945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 243945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 244945aea22SJiri Olsa 245945aea22SJiri Olsa return test__checkevent_numeric(evlist); 246945aea22SJiri Olsa } 247945aea22SJiri Olsa 248945aea22SJiri Olsa static int test__checkevent_symbolic_name_modifier(struct perf_evlist *evlist) 249945aea22SJiri Olsa { 250945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 251945aea22SJiri Olsa 252945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 253945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 254945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 255945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 256945aea22SJiri Olsa 257945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 258945aea22SJiri Olsa } 259945aea22SJiri Olsa 260945aea22SJiri Olsa static int test__checkevent_exclude_host_modifier(struct perf_evlist *evlist) 261945aea22SJiri Olsa { 262945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 263945aea22SJiri Olsa 264945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 265945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 266945aea22SJiri Olsa 267945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 268945aea22SJiri Olsa } 269945aea22SJiri Olsa 270945aea22SJiri Olsa static int test__checkevent_exclude_guest_modifier(struct perf_evlist *evlist) 271945aea22SJiri Olsa { 272945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 273945aea22SJiri Olsa 274945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 275945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 276945aea22SJiri Olsa 277945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 278945aea22SJiri Olsa } 279945aea22SJiri Olsa 280945aea22SJiri Olsa static int test__checkevent_symbolic_alias_modifier(struct perf_evlist *evlist) 281945aea22SJiri Olsa { 282945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 283945aea22SJiri Olsa 284945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 285945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 286945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 287945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 288945aea22SJiri Olsa 289945aea22SJiri Olsa return test__checkevent_symbolic_alias(evlist); 290945aea22SJiri Olsa } 291945aea22SJiri Olsa 292945aea22SJiri Olsa static int test__checkevent_genhw_modifier(struct perf_evlist *evlist) 293945aea22SJiri Olsa { 294945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 295945aea22SJiri Olsa 296945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 297945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 298945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 299945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 300945aea22SJiri Olsa 301945aea22SJiri Olsa return test__checkevent_genhw(evlist); 302945aea22SJiri Olsa } 303945aea22SJiri Olsa 304945aea22SJiri Olsa static int test__checkevent_breakpoint_modifier(struct perf_evlist *evlist) 305945aea22SJiri Olsa { 306945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 307945aea22SJiri Olsa 308945aea22SJiri Olsa 309945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 310945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 311945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 312945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 313945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 314945aea22SJiri Olsa !strcmp(perf_evsel__name(evsel), "mem:0:u")); 315945aea22SJiri Olsa 316945aea22SJiri Olsa return test__checkevent_breakpoint(evlist); 317945aea22SJiri Olsa } 318945aea22SJiri Olsa 319945aea22SJiri Olsa static int test__checkevent_breakpoint_x_modifier(struct perf_evlist *evlist) 320945aea22SJiri Olsa { 321945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 322945aea22SJiri Olsa 323945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 324945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 325945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 326945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 327945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 328945aea22SJiri Olsa !strcmp(perf_evsel__name(evsel), "mem:0:x:k")); 329945aea22SJiri Olsa 330945aea22SJiri Olsa return test__checkevent_breakpoint_x(evlist); 331945aea22SJiri Olsa } 332945aea22SJiri Olsa 333945aea22SJiri Olsa static int test__checkevent_breakpoint_r_modifier(struct perf_evlist *evlist) 334945aea22SJiri Olsa { 335945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 336945aea22SJiri Olsa 337945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 338945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 339945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 340945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 341945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 342945aea22SJiri Olsa !strcmp(perf_evsel__name(evsel), "mem:0:r:hp")); 343945aea22SJiri Olsa 344945aea22SJiri Olsa return test__checkevent_breakpoint_r(evlist); 345945aea22SJiri Olsa } 346945aea22SJiri Olsa 347945aea22SJiri Olsa static int test__checkevent_breakpoint_w_modifier(struct perf_evlist *evlist) 348945aea22SJiri Olsa { 349945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 350945aea22SJiri Olsa 351945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 352945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 353945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 354945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 355945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 356945aea22SJiri Olsa !strcmp(perf_evsel__name(evsel), "mem:0:w:up")); 357945aea22SJiri Olsa 358945aea22SJiri Olsa return test__checkevent_breakpoint_w(evlist); 359945aea22SJiri Olsa } 360945aea22SJiri Olsa 361945aea22SJiri Olsa static int test__checkevent_breakpoint_rw_modifier(struct perf_evlist *evlist) 362945aea22SJiri Olsa { 363945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 364945aea22SJiri Olsa 365945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 366945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 367945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 368945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 369945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 370945aea22SJiri Olsa !strcmp(perf_evsel__name(evsel), "mem:0:rw:kp")); 371945aea22SJiri Olsa 372945aea22SJiri Olsa return test__checkevent_breakpoint_rw(evlist); 373945aea22SJiri Olsa } 374945aea22SJiri Olsa 375945aea22SJiri Olsa static int test__checkevent_pmu(struct perf_evlist *evlist) 376945aea22SJiri Olsa { 377945aea22SJiri Olsa 378945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 379945aea22SJiri Olsa 380945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 381945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); 382945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 10 == evsel->attr.config); 383945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config1", 1 == evsel->attr.config1); 384945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config2", 3 == evsel->attr.config2); 385945aea22SJiri Olsa TEST_ASSERT_VAL("wrong period", 1000 == evsel->attr.sample_period); 386945aea22SJiri Olsa 387945aea22SJiri Olsa return 0; 388945aea22SJiri Olsa } 389945aea22SJiri Olsa 390945aea22SJiri Olsa static int test__checkevent_list(struct perf_evlist *evlist) 391945aea22SJiri Olsa { 392945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 393945aea22SJiri Olsa 394945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->nr_entries); 395945aea22SJiri Olsa 396945aea22SJiri Olsa /* r1 */ 397945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); 398945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config); 399945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config1", 0 == evsel->attr.config1); 400945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config2", 0 == evsel->attr.config2); 401945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 402945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 403945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 404945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 405945aea22SJiri Olsa 406945aea22SJiri Olsa /* syscalls:sys_enter_open:k */ 407945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 408945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->attr.type); 409945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 410945aea22SJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->attr.sample_type); 411945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->attr.sample_period); 412945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 413945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 414945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 415945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 416945aea22SJiri Olsa 417945aea22SJiri Olsa /* 1:1:hp */ 418945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 419945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->attr.type); 420945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config); 421945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 422945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 423945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 424945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 425945aea22SJiri Olsa 426945aea22SJiri Olsa return 0; 427945aea22SJiri Olsa } 428945aea22SJiri Olsa 429945aea22SJiri Olsa static int test__checkevent_pmu_name(struct perf_evlist *evlist) 430945aea22SJiri Olsa { 431945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 432945aea22SJiri Olsa 433945aea22SJiri Olsa /* cpu/config=1,name=krava/u */ 434945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); 435945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); 436945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config); 437945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", !strcmp(perf_evsel__name(evsel), "krava")); 438945aea22SJiri Olsa 439945aea22SJiri Olsa /* cpu/config=2/u" */ 440945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 441945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); 442945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); 443945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 2 == evsel->attr.config); 444945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 445945aea22SJiri Olsa !strcmp(perf_evsel__name(evsel), "cpu/config=2/u")); 446945aea22SJiri Olsa 447945aea22SJiri Olsa return 0; 448945aea22SJiri Olsa } 449945aea22SJiri Olsa 450945aea22SJiri Olsa static int test__checkevent_pmu_events(struct perf_evlist *evlist) 451945aea22SJiri Olsa { 452945aea22SJiri Olsa struct perf_evsel *evsel; 453945aea22SJiri Olsa 454945aea22SJiri Olsa evsel = list_entry(evlist->entries.next, struct perf_evsel, node); 455945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 456945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); 457945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", 458945aea22SJiri Olsa !evsel->attr.exclude_user); 459945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", 460945aea22SJiri Olsa evsel->attr.exclude_kernel); 461945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 462945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 463945aea22SJiri Olsa 464945aea22SJiri Olsa return 0; 465945aea22SJiri Olsa } 466945aea22SJiri Olsa 467945aea22SJiri Olsa static int test__checkterms_simple(struct list_head *terms) 468945aea22SJiri Olsa { 4696cee6cd3SArnaldo Carvalho de Melo struct parse_events_term *term; 470945aea22SJiri Olsa 471945aea22SJiri Olsa /* config=10 */ 4726cee6cd3SArnaldo Carvalho de Melo term = list_entry(terms->next, struct parse_events_term, list); 473945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 474945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG); 475945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 476945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 477945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 10); 478945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", !term->config); 479945aea22SJiri Olsa 480945aea22SJiri Olsa /* config1 */ 4816cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 482945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 483945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG1); 484945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 485945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 486945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 1); 487945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", !term->config); 488945aea22SJiri Olsa 489945aea22SJiri Olsa /* config2=3 */ 4906cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 491945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 492945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG2); 493945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 494945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 495945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 3); 496945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", !term->config); 497945aea22SJiri Olsa 498945aea22SJiri Olsa /* umask=1*/ 4996cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 500945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 501945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_USER); 502945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 503945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 504945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 1); 505945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "umask")); 506945aea22SJiri Olsa 507945aea22SJiri Olsa return 0; 508945aea22SJiri Olsa } 509945aea22SJiri Olsa 510945aea22SJiri Olsa static int test__group1(struct perf_evlist *evlist) 511945aea22SJiri Olsa { 512945aea22SJiri Olsa struct perf_evsel *evsel, *leader; 513945aea22SJiri Olsa 514945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); 5158d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 516945aea22SJiri Olsa 517945aea22SJiri Olsa /* instructions:k */ 518945aea22SJiri Olsa evsel = leader = perf_evlist__first(evlist); 519945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 520945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 521945aea22SJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); 522945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 523945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 524945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 525945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 526945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 527945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 528823254edSNamhyung Kim TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 5298d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); 5308d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 531945aea22SJiri Olsa 532945aea22SJiri Olsa /* cycles:upp */ 533945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 534945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 535945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 536945aea22SJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 537945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 538945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 539945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 540945aea22SJiri Olsa /* use of precise requires exclude_guest */ 541945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 542945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 543945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 2); 544945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 5458d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 546945aea22SJiri Olsa 547945aea22SJiri Olsa return 0; 548945aea22SJiri Olsa } 549945aea22SJiri Olsa 550945aea22SJiri Olsa static int test__group2(struct perf_evlist *evlist) 551945aea22SJiri Olsa { 552945aea22SJiri Olsa struct perf_evsel *evsel, *leader; 553945aea22SJiri Olsa 554945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->nr_entries); 5558d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 556945aea22SJiri Olsa 557945aea22SJiri Olsa /* faults + :ku modifier */ 558945aea22SJiri Olsa evsel = leader = perf_evlist__first(evlist); 559945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->attr.type); 560945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 561945aea22SJiri Olsa PERF_COUNT_SW_PAGE_FAULTS == evsel->attr.config); 562945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 563945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 564945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 565945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 566945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 567945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 568823254edSNamhyung Kim TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 5698d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); 5708d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 571945aea22SJiri Olsa 572945aea22SJiri Olsa /* cache-references + :u modifier */ 573945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 574945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 575945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 576945aea22SJiri Olsa PERF_COUNT_HW_CACHE_REFERENCES == evsel->attr.config); 577945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 578945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 579945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 5805a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 581945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 582945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 583945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 5848d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 585945aea22SJiri Olsa 586945aea22SJiri Olsa /* cycles:k */ 587945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 588945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 589945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 590945aea22SJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 591945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 592945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 593945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 594945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 595945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 596945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 597823254edSNamhyung Kim TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 598945aea22SJiri Olsa 599945aea22SJiri Olsa return 0; 600945aea22SJiri Olsa } 601945aea22SJiri Olsa 602945aea22SJiri Olsa static int test__group3(struct perf_evlist *evlist __maybe_unused) 603945aea22SJiri Olsa { 604945aea22SJiri Olsa struct perf_evsel *evsel, *leader; 605945aea22SJiri Olsa 606945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->nr_entries); 6078d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong number of groups", 2 == evlist->nr_groups); 608945aea22SJiri Olsa 609945aea22SJiri Olsa /* group1 syscalls:sys_enter_open:H */ 610945aea22SJiri Olsa evsel = leader = perf_evlist__first(evlist); 611945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->attr.type); 612945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 613945aea22SJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->attr.sample_type); 614945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->attr.sample_period); 615945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 616945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 617945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 618945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 619945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 620945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 621823254edSNamhyung Kim TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 622945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", 623945aea22SJiri Olsa !strcmp(leader->group_name, "group1")); 6248d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); 6258d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 626945aea22SJiri Olsa 627945aea22SJiri Olsa /* group1 cycles:kppp */ 628945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 629945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 630945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 631945aea22SJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 632945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 633945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 634945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 635945aea22SJiri Olsa /* use of precise requires exclude_guest */ 636945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 637945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 638945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 3); 639945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 640945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 6418d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 642945aea22SJiri Olsa 643945aea22SJiri Olsa /* group2 cycles + G modifier */ 644945aea22SJiri Olsa evsel = leader = perf_evsel__next(evsel); 645945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 646945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 647945aea22SJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 648945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 649945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 650945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 651945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 652945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 653945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 654823254edSNamhyung Kim TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 655945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", 656945aea22SJiri Olsa !strcmp(leader->group_name, "group2")); 6578d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); 6588d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 659945aea22SJiri Olsa 660945aea22SJiri Olsa /* group2 1:3 + G modifier */ 661945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 662945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->attr.type); 663945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 3 == evsel->attr.config); 664945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 665945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 666945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 667945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 668945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 669945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 670945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 6718d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 672945aea22SJiri Olsa 673945aea22SJiri Olsa /* instructions:u */ 674945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 675945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 676945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 677945aea22SJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); 678945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 679945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 680945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 681945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 682945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 683945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 684823254edSNamhyung Kim TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 685945aea22SJiri Olsa 686945aea22SJiri Olsa return 0; 687945aea22SJiri Olsa } 688945aea22SJiri Olsa 689945aea22SJiri Olsa static int test__group4(struct perf_evlist *evlist __maybe_unused) 690945aea22SJiri Olsa { 691945aea22SJiri Olsa struct perf_evsel *evsel, *leader; 692945aea22SJiri Olsa 693945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); 6948d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 695945aea22SJiri Olsa 696945aea22SJiri Olsa /* cycles:u + p */ 697945aea22SJiri Olsa evsel = leader = perf_evlist__first(evlist); 698945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 699945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 700945aea22SJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 701945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 702945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 703945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 704945aea22SJiri Olsa /* use of precise requires exclude_guest */ 705945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 706945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 707945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 1); 708945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 709823254edSNamhyung Kim TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 7108d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); 7118d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 712945aea22SJiri Olsa 713945aea22SJiri Olsa /* instructions:kp + p */ 714945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 715945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 716945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 717945aea22SJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); 718945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 719945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 720945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 721945aea22SJiri Olsa /* use of precise requires exclude_guest */ 722945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 723945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 724945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 2); 725945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 7268d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 727945aea22SJiri Olsa 728945aea22SJiri Olsa return 0; 729945aea22SJiri Olsa } 730945aea22SJiri Olsa 731945aea22SJiri Olsa static int test__group5(struct perf_evlist *evlist __maybe_unused) 732945aea22SJiri Olsa { 733945aea22SJiri Olsa struct perf_evsel *evsel, *leader; 734945aea22SJiri Olsa 735945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->nr_entries); 7368d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong number of groups", 2 == evlist->nr_groups); 737945aea22SJiri Olsa 738945aea22SJiri Olsa /* cycles + G */ 739945aea22SJiri Olsa evsel = leader = perf_evlist__first(evlist); 740945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 741945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 742945aea22SJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 743945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 744945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 745945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 746945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 747945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 748945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 749945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 750823254edSNamhyung Kim TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 7518d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); 7528d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 753945aea22SJiri Olsa 754945aea22SJiri Olsa /* instructions + G */ 755945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 756945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 757945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 758945aea22SJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); 759945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 760945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 761945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 762945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 763945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 764945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 765945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 7668d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 767945aea22SJiri Olsa 768945aea22SJiri Olsa /* cycles:G */ 769945aea22SJiri Olsa evsel = leader = perf_evsel__next(evsel); 770945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 771945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 772945aea22SJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 773945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 774945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 775945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 776945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 777945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 778945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 779945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 780823254edSNamhyung Kim TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 7818d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); 7828d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 783945aea22SJiri Olsa 784945aea22SJiri Olsa /* instructions:G */ 785945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 786945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 787945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 788945aea22SJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); 789945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 790945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 791945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 792945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 793945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 794945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 795945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 7968d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 797945aea22SJiri Olsa 798945aea22SJiri Olsa /* cycles */ 799945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 800945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 801945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 802945aea22SJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 803945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 804945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 805945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 806945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 807945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 808945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 809823254edSNamhyung Kim TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 810945aea22SJiri Olsa 811945aea22SJiri Olsa return 0; 812945aea22SJiri Olsa } 813945aea22SJiri Olsa 8145a30a99fSJiri Olsa static int test__group_gh1(struct perf_evlist *evlist) 8155a30a99fSJiri Olsa { 8165a30a99fSJiri Olsa struct perf_evsel *evsel, *leader; 8175a30a99fSJiri Olsa 8185a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); 8195a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 8205a30a99fSJiri Olsa 8215a30a99fSJiri Olsa /* cycles + :H group modifier */ 8225a30a99fSJiri Olsa evsel = leader = perf_evlist__first(evlist); 8235a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 8245a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 8255a30a99fSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 8265a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 8275a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 8285a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 8295a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 8305a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 8315a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 8325a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 8335a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 8345a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); 8355a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 8365a30a99fSJiri Olsa 8375a30a99fSJiri Olsa /* cache-misses:G + :H group modifier */ 8385a30a99fSJiri Olsa evsel = perf_evsel__next(evsel); 8395a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 8405a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 8415a30a99fSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->attr.config); 8425a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 8435a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 8445a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 8455a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 8465a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 8475a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 8485a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 8495a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 8505a30a99fSJiri Olsa 8515a30a99fSJiri Olsa return 0; 8525a30a99fSJiri Olsa } 8535a30a99fSJiri Olsa 8545a30a99fSJiri Olsa static int test__group_gh2(struct perf_evlist *evlist) 8555a30a99fSJiri Olsa { 8565a30a99fSJiri Olsa struct perf_evsel *evsel, *leader; 8575a30a99fSJiri Olsa 8585a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); 8595a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 8605a30a99fSJiri Olsa 8615a30a99fSJiri Olsa /* cycles + :G group modifier */ 8625a30a99fSJiri Olsa evsel = leader = perf_evlist__first(evlist); 8635a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 8645a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 8655a30a99fSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 8665a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 8675a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 8685a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 8695a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 8705a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 8715a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 8725a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 8735a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 8745a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); 8755a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 8765a30a99fSJiri Olsa 8775a30a99fSJiri Olsa /* cache-misses:H + :G group modifier */ 8785a30a99fSJiri Olsa evsel = perf_evsel__next(evsel); 8795a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 8805a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 8815a30a99fSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->attr.config); 8825a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 8835a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 8845a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 8855a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 8865a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 8875a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 8885a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 8895a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 8905a30a99fSJiri Olsa 8915a30a99fSJiri Olsa return 0; 8925a30a99fSJiri Olsa } 8935a30a99fSJiri Olsa 8945a30a99fSJiri Olsa static int test__group_gh3(struct perf_evlist *evlist) 8955a30a99fSJiri Olsa { 8965a30a99fSJiri Olsa struct perf_evsel *evsel, *leader; 8975a30a99fSJiri Olsa 8985a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); 8995a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 9005a30a99fSJiri Olsa 9015a30a99fSJiri Olsa /* cycles:G + :u group modifier */ 9025a30a99fSJiri Olsa evsel = leader = perf_evlist__first(evlist); 9035a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 9045a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 9055a30a99fSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 9065a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 9075a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 9085a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 9095a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 9105a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 9115a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 9125a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 9135a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 9145a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); 9155a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 9165a30a99fSJiri Olsa 9175a30a99fSJiri Olsa /* cache-misses:H + :u group modifier */ 9185a30a99fSJiri Olsa evsel = perf_evsel__next(evsel); 9195a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 9205a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 9215a30a99fSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->attr.config); 9225a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 9235a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 9245a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 9255a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 9265a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 9275a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 9285a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 9295a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 9305a30a99fSJiri Olsa 9315a30a99fSJiri Olsa return 0; 9325a30a99fSJiri Olsa } 9335a30a99fSJiri Olsa 9345a30a99fSJiri Olsa static int test__group_gh4(struct perf_evlist *evlist) 9355a30a99fSJiri Olsa { 9365a30a99fSJiri Olsa struct perf_evsel *evsel, *leader; 9375a30a99fSJiri Olsa 9385a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); 9395a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 9405a30a99fSJiri Olsa 9415a30a99fSJiri Olsa /* cycles:G + :uG group modifier */ 9425a30a99fSJiri Olsa evsel = leader = perf_evlist__first(evlist); 9435a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 9445a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 9455a30a99fSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 9465a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 9475a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 9485a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 9495a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 9505a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 9515a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 9525a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 9535a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 9545a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); 9555a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 9565a30a99fSJiri Olsa 9575a30a99fSJiri Olsa /* cache-misses:H + :uG group modifier */ 9585a30a99fSJiri Olsa evsel = perf_evsel__next(evsel); 9595a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 9605a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 9615a30a99fSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->attr.config); 9625a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 9635a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 9645a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 9655a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 9665a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 9675a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 9685a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 9695a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 9705a30a99fSJiri Olsa 9715a30a99fSJiri Olsa return 0; 9725a30a99fSJiri Olsa } 9735a30a99fSJiri Olsa 97482ce75d9SJiri Olsa static int count_tracepoints(void) 97582ce75d9SJiri Olsa { 97682ce75d9SJiri Olsa char events_path[PATH_MAX]; 97782ce75d9SJiri Olsa struct dirent *events_ent; 97882ce75d9SJiri Olsa DIR *events_dir; 97982ce75d9SJiri Olsa int cnt = 0; 98082ce75d9SJiri Olsa 98182ce75d9SJiri Olsa scnprintf(events_path, PATH_MAX, "%s/tracing/events", 98282ce75d9SJiri Olsa debugfs_find_mountpoint()); 98382ce75d9SJiri Olsa 98482ce75d9SJiri Olsa events_dir = opendir(events_path); 98582ce75d9SJiri Olsa 98682ce75d9SJiri Olsa TEST_ASSERT_VAL("Can't open events dir", events_dir); 98782ce75d9SJiri Olsa 98882ce75d9SJiri Olsa while ((events_ent = readdir(events_dir))) { 98982ce75d9SJiri Olsa char sys_path[PATH_MAX]; 99082ce75d9SJiri Olsa struct dirent *sys_ent; 99182ce75d9SJiri Olsa DIR *sys_dir; 99282ce75d9SJiri Olsa 99382ce75d9SJiri Olsa if (!strcmp(events_ent->d_name, ".") 99482ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "..") 99582ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "enable") 99682ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "header_event") 99782ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "header_page")) 99882ce75d9SJiri Olsa continue; 99982ce75d9SJiri Olsa 100082ce75d9SJiri Olsa scnprintf(sys_path, PATH_MAX, "%s/%s", 100182ce75d9SJiri Olsa events_path, events_ent->d_name); 100282ce75d9SJiri Olsa 100382ce75d9SJiri Olsa sys_dir = opendir(sys_path); 100482ce75d9SJiri Olsa TEST_ASSERT_VAL("Can't open sys dir", sys_dir); 100582ce75d9SJiri Olsa 100682ce75d9SJiri Olsa while ((sys_ent = readdir(sys_dir))) { 100782ce75d9SJiri Olsa if (!strcmp(sys_ent->d_name, ".") 100882ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "..") 100982ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "enable") 101082ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "filter")) 101182ce75d9SJiri Olsa continue; 101282ce75d9SJiri Olsa 101382ce75d9SJiri Olsa cnt++; 101482ce75d9SJiri Olsa } 101582ce75d9SJiri Olsa 101682ce75d9SJiri Olsa closedir(sys_dir); 101782ce75d9SJiri Olsa } 101882ce75d9SJiri Olsa 101982ce75d9SJiri Olsa closedir(events_dir); 102082ce75d9SJiri Olsa return cnt; 102182ce75d9SJiri Olsa } 102282ce75d9SJiri Olsa 102382ce75d9SJiri Olsa static int test__all_tracepoints(struct perf_evlist *evlist) 102482ce75d9SJiri Olsa { 102582ce75d9SJiri Olsa TEST_ASSERT_VAL("wrong events count", 102682ce75d9SJiri Olsa count_tracepoints() == evlist->nr_entries); 102782ce75d9SJiri Olsa 102882ce75d9SJiri Olsa return test__checkevent_tracepoint_multi(evlist); 102982ce75d9SJiri Olsa } 103082ce75d9SJiri Olsa 103123b6339bSArnaldo Carvalho de Melo struct evlist_test { 1032945aea22SJiri Olsa const char *name; 1033945aea22SJiri Olsa __u32 type; 1034945aea22SJiri Olsa int (*check)(struct perf_evlist *evlist); 1035945aea22SJiri Olsa }; 1036945aea22SJiri Olsa 103723b6339bSArnaldo Carvalho de Melo static struct evlist_test test__events[] = { 1038945aea22SJiri Olsa [0] = { 1039945aea22SJiri Olsa .name = "syscalls:sys_enter_open", 1040945aea22SJiri Olsa .check = test__checkevent_tracepoint, 1041945aea22SJiri Olsa }, 1042945aea22SJiri Olsa [1] = { 1043945aea22SJiri Olsa .name = "syscalls:*", 1044945aea22SJiri Olsa .check = test__checkevent_tracepoint_multi, 1045945aea22SJiri Olsa }, 1046945aea22SJiri Olsa [2] = { 1047945aea22SJiri Olsa .name = "r1a", 1048945aea22SJiri Olsa .check = test__checkevent_raw, 1049945aea22SJiri Olsa }, 1050945aea22SJiri Olsa [3] = { 1051945aea22SJiri Olsa .name = "1:1", 1052945aea22SJiri Olsa .check = test__checkevent_numeric, 1053945aea22SJiri Olsa }, 1054945aea22SJiri Olsa [4] = { 1055945aea22SJiri Olsa .name = "instructions", 1056945aea22SJiri Olsa .check = test__checkevent_symbolic_name, 1057945aea22SJiri Olsa }, 1058945aea22SJiri Olsa [5] = { 1059945aea22SJiri Olsa .name = "cycles/period=100000,config2/", 1060945aea22SJiri Olsa .check = test__checkevent_symbolic_name_config, 1061945aea22SJiri Olsa }, 1062945aea22SJiri Olsa [6] = { 1063945aea22SJiri Olsa .name = "faults", 1064945aea22SJiri Olsa .check = test__checkevent_symbolic_alias, 1065945aea22SJiri Olsa }, 1066945aea22SJiri Olsa [7] = { 1067945aea22SJiri Olsa .name = "L1-dcache-load-miss", 1068945aea22SJiri Olsa .check = test__checkevent_genhw, 1069945aea22SJiri Olsa }, 1070945aea22SJiri Olsa [8] = { 1071945aea22SJiri Olsa .name = "mem:0", 1072945aea22SJiri Olsa .check = test__checkevent_breakpoint, 1073945aea22SJiri Olsa }, 1074945aea22SJiri Olsa [9] = { 1075945aea22SJiri Olsa .name = "mem:0:x", 1076945aea22SJiri Olsa .check = test__checkevent_breakpoint_x, 1077945aea22SJiri Olsa }, 1078945aea22SJiri Olsa [10] = { 1079945aea22SJiri Olsa .name = "mem:0:r", 1080945aea22SJiri Olsa .check = test__checkevent_breakpoint_r, 1081945aea22SJiri Olsa }, 1082945aea22SJiri Olsa [11] = { 1083945aea22SJiri Olsa .name = "mem:0:w", 1084945aea22SJiri Olsa .check = test__checkevent_breakpoint_w, 1085945aea22SJiri Olsa }, 1086945aea22SJiri Olsa [12] = { 1087945aea22SJiri Olsa .name = "syscalls:sys_enter_open:k", 1088945aea22SJiri Olsa .check = test__checkevent_tracepoint_modifier, 1089945aea22SJiri Olsa }, 1090945aea22SJiri Olsa [13] = { 1091945aea22SJiri Olsa .name = "syscalls:*:u", 1092945aea22SJiri Olsa .check = test__checkevent_tracepoint_multi_modifier, 1093945aea22SJiri Olsa }, 1094945aea22SJiri Olsa [14] = { 1095945aea22SJiri Olsa .name = "r1a:kp", 1096945aea22SJiri Olsa .check = test__checkevent_raw_modifier, 1097945aea22SJiri Olsa }, 1098945aea22SJiri Olsa [15] = { 1099945aea22SJiri Olsa .name = "1:1:hp", 1100945aea22SJiri Olsa .check = test__checkevent_numeric_modifier, 1101945aea22SJiri Olsa }, 1102945aea22SJiri Olsa [16] = { 1103945aea22SJiri Olsa .name = "instructions:h", 1104945aea22SJiri Olsa .check = test__checkevent_symbolic_name_modifier, 1105945aea22SJiri Olsa }, 1106945aea22SJiri Olsa [17] = { 1107945aea22SJiri Olsa .name = "faults:u", 1108945aea22SJiri Olsa .check = test__checkevent_symbolic_alias_modifier, 1109945aea22SJiri Olsa }, 1110945aea22SJiri Olsa [18] = { 1111945aea22SJiri Olsa .name = "L1-dcache-load-miss:kp", 1112945aea22SJiri Olsa .check = test__checkevent_genhw_modifier, 1113945aea22SJiri Olsa }, 1114945aea22SJiri Olsa [19] = { 1115945aea22SJiri Olsa .name = "mem:0:u", 1116945aea22SJiri Olsa .check = test__checkevent_breakpoint_modifier, 1117945aea22SJiri Olsa }, 1118945aea22SJiri Olsa [20] = { 1119945aea22SJiri Olsa .name = "mem:0:x:k", 1120945aea22SJiri Olsa .check = test__checkevent_breakpoint_x_modifier, 1121945aea22SJiri Olsa }, 1122945aea22SJiri Olsa [21] = { 1123945aea22SJiri Olsa .name = "mem:0:r:hp", 1124945aea22SJiri Olsa .check = test__checkevent_breakpoint_r_modifier, 1125945aea22SJiri Olsa }, 1126945aea22SJiri Olsa [22] = { 1127945aea22SJiri Olsa .name = "mem:0:w:up", 1128945aea22SJiri Olsa .check = test__checkevent_breakpoint_w_modifier, 1129945aea22SJiri Olsa }, 1130945aea22SJiri Olsa [23] = { 1131945aea22SJiri Olsa .name = "r1,syscalls:sys_enter_open:k,1:1:hp", 1132945aea22SJiri Olsa .check = test__checkevent_list, 1133945aea22SJiri Olsa }, 1134945aea22SJiri Olsa [24] = { 1135945aea22SJiri Olsa .name = "instructions:G", 1136945aea22SJiri Olsa .check = test__checkevent_exclude_host_modifier, 1137945aea22SJiri Olsa }, 1138945aea22SJiri Olsa [25] = { 1139945aea22SJiri Olsa .name = "instructions:H", 1140945aea22SJiri Olsa .check = test__checkevent_exclude_guest_modifier, 1141945aea22SJiri Olsa }, 1142945aea22SJiri Olsa [26] = { 1143945aea22SJiri Olsa .name = "mem:0:rw", 1144945aea22SJiri Olsa .check = test__checkevent_breakpoint_rw, 1145945aea22SJiri Olsa }, 1146945aea22SJiri Olsa [27] = { 1147945aea22SJiri Olsa .name = "mem:0:rw:kp", 1148945aea22SJiri Olsa .check = test__checkevent_breakpoint_rw_modifier, 1149945aea22SJiri Olsa }, 1150945aea22SJiri Olsa [28] = { 1151945aea22SJiri Olsa .name = "{instructions:k,cycles:upp}", 1152945aea22SJiri Olsa .check = test__group1, 1153945aea22SJiri Olsa }, 1154945aea22SJiri Olsa [29] = { 1155945aea22SJiri Olsa .name = "{faults:k,cache-references}:u,cycles:k", 1156945aea22SJiri Olsa .check = test__group2, 1157945aea22SJiri Olsa }, 1158945aea22SJiri Olsa [30] = { 1159945aea22SJiri Olsa .name = "group1{syscalls:sys_enter_open:H,cycles:kppp},group2{cycles,1:3}:G,instructions:u", 1160945aea22SJiri Olsa .check = test__group3, 1161945aea22SJiri Olsa }, 1162945aea22SJiri Olsa [31] = { 1163945aea22SJiri Olsa .name = "{cycles:u,instructions:kp}:p", 1164945aea22SJiri Olsa .check = test__group4, 1165945aea22SJiri Olsa }, 1166945aea22SJiri Olsa [32] = { 1167945aea22SJiri Olsa .name = "{cycles,instructions}:G,{cycles:G,instructions:G},cycles", 1168945aea22SJiri Olsa .check = test__group5, 1169945aea22SJiri Olsa }, 117082ce75d9SJiri Olsa [33] = { 117182ce75d9SJiri Olsa .name = "*:*", 117282ce75d9SJiri Olsa .check = test__all_tracepoints, 117382ce75d9SJiri Olsa }, 11745a30a99fSJiri Olsa [34] = { 11755a30a99fSJiri Olsa .name = "{cycles,cache-misses:G}:H", 11765a30a99fSJiri Olsa .check = test__group_gh1, 11775a30a99fSJiri Olsa }, 11785a30a99fSJiri Olsa [35] = { 11795a30a99fSJiri Olsa .name = "{cycles,cache-misses:H}:G", 11805a30a99fSJiri Olsa .check = test__group_gh2, 11815a30a99fSJiri Olsa }, 11825a30a99fSJiri Olsa [36] = { 11835a30a99fSJiri Olsa .name = "{cycles:G,cache-misses:H}:u", 11845a30a99fSJiri Olsa .check = test__group_gh3, 11855a30a99fSJiri Olsa }, 11865a30a99fSJiri Olsa [37] = { 11875a30a99fSJiri Olsa .name = "{cycles:G,cache-misses:H}:uG", 11885a30a99fSJiri Olsa .check = test__group_gh4, 11895a30a99fSJiri Olsa }, 1190945aea22SJiri Olsa }; 1191945aea22SJiri Olsa 119223b6339bSArnaldo Carvalho de Melo static struct evlist_test test__events_pmu[] = { 1193945aea22SJiri Olsa [0] = { 1194945aea22SJiri Olsa .name = "cpu/config=10,config1,config2=3,period=1000/u", 1195945aea22SJiri Olsa .check = test__checkevent_pmu, 1196945aea22SJiri Olsa }, 1197945aea22SJiri Olsa [1] = { 1198945aea22SJiri Olsa .name = "cpu/config=1,name=krava/u,cpu/config=2/u", 1199945aea22SJiri Olsa .check = test__checkevent_pmu_name, 1200945aea22SJiri Olsa }, 1201945aea22SJiri Olsa }; 1202945aea22SJiri Olsa 120323b6339bSArnaldo Carvalho de Melo struct terms_test { 1204945aea22SJiri Olsa const char *str; 1205945aea22SJiri Olsa __u32 type; 1206945aea22SJiri Olsa int (*check)(struct list_head *terms); 1207945aea22SJiri Olsa }; 1208945aea22SJiri Olsa 120923b6339bSArnaldo Carvalho de Melo static struct terms_test test__terms[] = { 1210945aea22SJiri Olsa [0] = { 1211945aea22SJiri Olsa .str = "config=10,config1,config2=3,umask=1", 1212945aea22SJiri Olsa .check = test__checkterms_simple, 1213945aea22SJiri Olsa }, 1214945aea22SJiri Olsa }; 1215945aea22SJiri Olsa 121623b6339bSArnaldo Carvalho de Melo static int test_event(struct evlist_test *e) 1217945aea22SJiri Olsa { 1218945aea22SJiri Olsa struct perf_evlist *evlist; 1219945aea22SJiri Olsa int ret; 1220945aea22SJiri Olsa 1221945aea22SJiri Olsa evlist = perf_evlist__new(NULL, NULL); 1222945aea22SJiri Olsa if (evlist == NULL) 1223945aea22SJiri Olsa return -ENOMEM; 1224945aea22SJiri Olsa 1225d8f7bbc9SJiri Olsa ret = parse_events(evlist, e->name); 1226945aea22SJiri Olsa if (ret) { 1227945aea22SJiri Olsa pr_debug("failed to parse event '%s', err %d\n", 1228945aea22SJiri Olsa e->name, ret); 1229945aea22SJiri Olsa return ret; 1230945aea22SJiri Olsa } 1231945aea22SJiri Olsa 1232945aea22SJiri Olsa ret = e->check(evlist); 1233945aea22SJiri Olsa perf_evlist__delete(evlist); 1234945aea22SJiri Olsa 1235945aea22SJiri Olsa return ret; 1236945aea22SJiri Olsa } 1237945aea22SJiri Olsa 123823b6339bSArnaldo Carvalho de Melo static int test_events(struct evlist_test *events, unsigned cnt) 1239945aea22SJiri Olsa { 1240945aea22SJiri Olsa int ret1, ret2 = 0; 1241945aea22SJiri Olsa unsigned i; 1242945aea22SJiri Olsa 1243945aea22SJiri Olsa for (i = 0; i < cnt; i++) { 124423b6339bSArnaldo Carvalho de Melo struct evlist_test *e = &events[i]; 1245945aea22SJiri Olsa 1246945aea22SJiri Olsa pr_debug("running test %d '%s'\n", i, e->name); 1247945aea22SJiri Olsa ret1 = test_event(e); 1248945aea22SJiri Olsa if (ret1) 1249945aea22SJiri Olsa ret2 = ret1; 1250945aea22SJiri Olsa } 1251945aea22SJiri Olsa 1252945aea22SJiri Olsa return ret2; 1253945aea22SJiri Olsa } 1254945aea22SJiri Olsa 125523b6339bSArnaldo Carvalho de Melo static int test_term(struct terms_test *t) 1256945aea22SJiri Olsa { 1257945aea22SJiri Olsa struct list_head *terms; 1258945aea22SJiri Olsa int ret; 1259945aea22SJiri Olsa 1260945aea22SJiri Olsa terms = malloc(sizeof(*terms)); 1261945aea22SJiri Olsa if (!terms) 1262945aea22SJiri Olsa return -ENOMEM; 1263945aea22SJiri Olsa 1264945aea22SJiri Olsa INIT_LIST_HEAD(terms); 1265945aea22SJiri Olsa 1266945aea22SJiri Olsa ret = parse_events_terms(terms, t->str); 1267945aea22SJiri Olsa if (ret) { 1268945aea22SJiri Olsa pr_debug("failed to parse terms '%s', err %d\n", 1269945aea22SJiri Olsa t->str , ret); 1270945aea22SJiri Olsa return ret; 1271945aea22SJiri Olsa } 1272945aea22SJiri Olsa 1273945aea22SJiri Olsa ret = t->check(terms); 1274945aea22SJiri Olsa parse_events__free_terms(terms); 1275945aea22SJiri Olsa 1276945aea22SJiri Olsa return ret; 1277945aea22SJiri Olsa } 1278945aea22SJiri Olsa 127923b6339bSArnaldo Carvalho de Melo static int test_terms(struct terms_test *terms, unsigned cnt) 1280945aea22SJiri Olsa { 1281945aea22SJiri Olsa int ret = 0; 1282945aea22SJiri Olsa unsigned i; 1283945aea22SJiri Olsa 1284945aea22SJiri Olsa for (i = 0; i < cnt; i++) { 128523b6339bSArnaldo Carvalho de Melo struct terms_test *t = &terms[i]; 1286945aea22SJiri Olsa 1287945aea22SJiri Olsa pr_debug("running test %d '%s'\n", i, t->str); 1288945aea22SJiri Olsa ret = test_term(t); 1289945aea22SJiri Olsa if (ret) 1290945aea22SJiri Olsa break; 1291945aea22SJiri Olsa } 1292945aea22SJiri Olsa 1293945aea22SJiri Olsa return ret; 1294945aea22SJiri Olsa } 1295945aea22SJiri Olsa 1296945aea22SJiri Olsa static int test_pmu(void) 1297945aea22SJiri Olsa { 1298945aea22SJiri Olsa struct stat st; 1299945aea22SJiri Olsa char path[PATH_MAX]; 1300945aea22SJiri Olsa int ret; 1301945aea22SJiri Olsa 1302945aea22SJiri Olsa snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/format/", 1303945aea22SJiri Olsa sysfs_find_mountpoint()); 1304945aea22SJiri Olsa 1305945aea22SJiri Olsa ret = stat(path, &st); 1306945aea22SJiri Olsa if (ret) 1307945aea22SJiri Olsa pr_debug("omitting PMU cpu tests\n"); 1308945aea22SJiri Olsa return !ret; 1309945aea22SJiri Olsa } 1310945aea22SJiri Olsa 1311945aea22SJiri Olsa static int test_pmu_events(void) 1312945aea22SJiri Olsa { 1313945aea22SJiri Olsa struct stat st; 1314945aea22SJiri Olsa char path[PATH_MAX]; 1315945aea22SJiri Olsa struct dirent *ent; 1316945aea22SJiri Olsa DIR *dir; 1317945aea22SJiri Olsa int ret; 1318945aea22SJiri Olsa 1319945aea22SJiri Olsa snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/events/", 1320945aea22SJiri Olsa sysfs_find_mountpoint()); 1321945aea22SJiri Olsa 1322945aea22SJiri Olsa ret = stat(path, &st); 1323945aea22SJiri Olsa if (ret) { 1324*a895d57dSMasanari Iida pr_debug("omitting PMU cpu events tests\n"); 1325945aea22SJiri Olsa return 0; 1326945aea22SJiri Olsa } 1327945aea22SJiri Olsa 1328945aea22SJiri Olsa dir = opendir(path); 1329945aea22SJiri Olsa if (!dir) { 1330945aea22SJiri Olsa pr_debug("can't open pmu event dir"); 1331945aea22SJiri Olsa return -1; 1332945aea22SJiri Olsa } 1333945aea22SJiri Olsa 1334945aea22SJiri Olsa while (!ret && (ent = readdir(dir))) { 1335945aea22SJiri Olsa #define MAX_NAME 100 133623b6339bSArnaldo Carvalho de Melo struct evlist_test e; 1337945aea22SJiri Olsa char name[MAX_NAME]; 1338945aea22SJiri Olsa 1339945aea22SJiri Olsa if (!strcmp(ent->d_name, ".") || 1340945aea22SJiri Olsa !strcmp(ent->d_name, "..")) 1341945aea22SJiri Olsa continue; 1342945aea22SJiri Olsa 1343945aea22SJiri Olsa snprintf(name, MAX_NAME, "cpu/event=%s/u", ent->d_name); 1344945aea22SJiri Olsa 1345945aea22SJiri Olsa e.name = name; 1346945aea22SJiri Olsa e.check = test__checkevent_pmu_events; 1347945aea22SJiri Olsa 1348945aea22SJiri Olsa ret = test_event(&e); 1349945aea22SJiri Olsa #undef MAX_NAME 1350945aea22SJiri Olsa } 1351945aea22SJiri Olsa 1352945aea22SJiri Olsa closedir(dir); 1353945aea22SJiri Olsa return ret; 1354945aea22SJiri Olsa } 1355945aea22SJiri Olsa 1356c81251e8SJiri Olsa int test__parse_events(void) 1357945aea22SJiri Olsa { 1358945aea22SJiri Olsa int ret1, ret2 = 0; 1359945aea22SJiri Olsa 1360945aea22SJiri Olsa #define TEST_EVENTS(tests) \ 1361945aea22SJiri Olsa do { \ 1362945aea22SJiri Olsa ret1 = test_events(tests, ARRAY_SIZE(tests)); \ 1363945aea22SJiri Olsa if (!ret2) \ 1364945aea22SJiri Olsa ret2 = ret1; \ 1365945aea22SJiri Olsa } while (0) 1366945aea22SJiri Olsa 1367945aea22SJiri Olsa TEST_EVENTS(test__events); 1368945aea22SJiri Olsa 1369945aea22SJiri Olsa if (test_pmu()) 1370945aea22SJiri Olsa TEST_EVENTS(test__events_pmu); 1371945aea22SJiri Olsa 1372945aea22SJiri Olsa if (test_pmu()) { 1373945aea22SJiri Olsa int ret = test_pmu_events(); 1374945aea22SJiri Olsa if (ret) 1375945aea22SJiri Olsa return ret; 1376945aea22SJiri Olsa } 1377945aea22SJiri Olsa 1378945aea22SJiri Olsa ret1 = test_terms(test__terms, ARRAY_SIZE(test__terms)); 1379945aea22SJiri Olsa if (!ret2) 1380945aea22SJiri Olsa ret2 = ret1; 1381945aea22SJiri Olsa 1382945aea22SJiri Olsa return ret2; 1383945aea22SJiri Olsa } 1384