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); 26*8d7d8474SNamhyung 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); 39*8d7d8474SNamhyung 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); 515*8d7d8474SNamhyung 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)); 529*8d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); 530*8d7d8474SNamhyung 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); 545*8d7d8474SNamhyung 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); 555*8d7d8474SNamhyung 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)); 569*8d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); 570*8d7d8474SNamhyung 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); 580945aea22SJiri 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); 584*8d7d8474SNamhyung 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); 607*8d7d8474SNamhyung 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")); 624*8d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); 625*8d7d8474SNamhyung 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); 641*8d7d8474SNamhyung 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")); 657*8d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); 658*8d7d8474SNamhyung 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); 671*8d7d8474SNamhyung 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); 694*8d7d8474SNamhyung 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)); 710*8d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); 711*8d7d8474SNamhyung 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); 726*8d7d8474SNamhyung 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); 736*8d7d8474SNamhyung 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)); 751*8d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); 752*8d7d8474SNamhyung 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); 766*8d7d8474SNamhyung 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)); 781*8d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); 782*8d7d8474SNamhyung 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); 796*8d7d8474SNamhyung 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 81482ce75d9SJiri Olsa static int count_tracepoints(void) 81582ce75d9SJiri Olsa { 81682ce75d9SJiri Olsa char events_path[PATH_MAX]; 81782ce75d9SJiri Olsa struct dirent *events_ent; 81882ce75d9SJiri Olsa DIR *events_dir; 81982ce75d9SJiri Olsa int cnt = 0; 82082ce75d9SJiri Olsa 82182ce75d9SJiri Olsa scnprintf(events_path, PATH_MAX, "%s/tracing/events", 82282ce75d9SJiri Olsa debugfs_find_mountpoint()); 82382ce75d9SJiri Olsa 82482ce75d9SJiri Olsa events_dir = opendir(events_path); 82582ce75d9SJiri Olsa 82682ce75d9SJiri Olsa TEST_ASSERT_VAL("Can't open events dir", events_dir); 82782ce75d9SJiri Olsa 82882ce75d9SJiri Olsa while ((events_ent = readdir(events_dir))) { 82982ce75d9SJiri Olsa char sys_path[PATH_MAX]; 83082ce75d9SJiri Olsa struct dirent *sys_ent; 83182ce75d9SJiri Olsa DIR *sys_dir; 83282ce75d9SJiri Olsa 83382ce75d9SJiri Olsa if (!strcmp(events_ent->d_name, ".") 83482ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "..") 83582ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "enable") 83682ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "header_event") 83782ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "header_page")) 83882ce75d9SJiri Olsa continue; 83982ce75d9SJiri Olsa 84082ce75d9SJiri Olsa scnprintf(sys_path, PATH_MAX, "%s/%s", 84182ce75d9SJiri Olsa events_path, events_ent->d_name); 84282ce75d9SJiri Olsa 84382ce75d9SJiri Olsa sys_dir = opendir(sys_path); 84482ce75d9SJiri Olsa TEST_ASSERT_VAL("Can't open sys dir", sys_dir); 84582ce75d9SJiri Olsa 84682ce75d9SJiri Olsa while ((sys_ent = readdir(sys_dir))) { 84782ce75d9SJiri Olsa if (!strcmp(sys_ent->d_name, ".") 84882ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "..") 84982ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "enable") 85082ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "filter")) 85182ce75d9SJiri Olsa continue; 85282ce75d9SJiri Olsa 85382ce75d9SJiri Olsa cnt++; 85482ce75d9SJiri Olsa } 85582ce75d9SJiri Olsa 85682ce75d9SJiri Olsa closedir(sys_dir); 85782ce75d9SJiri Olsa } 85882ce75d9SJiri Olsa 85982ce75d9SJiri Olsa closedir(events_dir); 86082ce75d9SJiri Olsa return cnt; 86182ce75d9SJiri Olsa } 86282ce75d9SJiri Olsa 86382ce75d9SJiri Olsa static int test__all_tracepoints(struct perf_evlist *evlist) 86482ce75d9SJiri Olsa { 86582ce75d9SJiri Olsa TEST_ASSERT_VAL("wrong events count", 86682ce75d9SJiri Olsa count_tracepoints() == evlist->nr_entries); 86782ce75d9SJiri Olsa 86882ce75d9SJiri Olsa return test__checkevent_tracepoint_multi(evlist); 86982ce75d9SJiri Olsa } 87082ce75d9SJiri Olsa 87123b6339bSArnaldo Carvalho de Melo struct evlist_test { 872945aea22SJiri Olsa const char *name; 873945aea22SJiri Olsa __u32 type; 874945aea22SJiri Olsa int (*check)(struct perf_evlist *evlist); 875945aea22SJiri Olsa }; 876945aea22SJiri Olsa 87723b6339bSArnaldo Carvalho de Melo static struct evlist_test test__events[] = { 878945aea22SJiri Olsa [0] = { 879945aea22SJiri Olsa .name = "syscalls:sys_enter_open", 880945aea22SJiri Olsa .check = test__checkevent_tracepoint, 881945aea22SJiri Olsa }, 882945aea22SJiri Olsa [1] = { 883945aea22SJiri Olsa .name = "syscalls:*", 884945aea22SJiri Olsa .check = test__checkevent_tracepoint_multi, 885945aea22SJiri Olsa }, 886945aea22SJiri Olsa [2] = { 887945aea22SJiri Olsa .name = "r1a", 888945aea22SJiri Olsa .check = test__checkevent_raw, 889945aea22SJiri Olsa }, 890945aea22SJiri Olsa [3] = { 891945aea22SJiri Olsa .name = "1:1", 892945aea22SJiri Olsa .check = test__checkevent_numeric, 893945aea22SJiri Olsa }, 894945aea22SJiri Olsa [4] = { 895945aea22SJiri Olsa .name = "instructions", 896945aea22SJiri Olsa .check = test__checkevent_symbolic_name, 897945aea22SJiri Olsa }, 898945aea22SJiri Olsa [5] = { 899945aea22SJiri Olsa .name = "cycles/period=100000,config2/", 900945aea22SJiri Olsa .check = test__checkevent_symbolic_name_config, 901945aea22SJiri Olsa }, 902945aea22SJiri Olsa [6] = { 903945aea22SJiri Olsa .name = "faults", 904945aea22SJiri Olsa .check = test__checkevent_symbolic_alias, 905945aea22SJiri Olsa }, 906945aea22SJiri Olsa [7] = { 907945aea22SJiri Olsa .name = "L1-dcache-load-miss", 908945aea22SJiri Olsa .check = test__checkevent_genhw, 909945aea22SJiri Olsa }, 910945aea22SJiri Olsa [8] = { 911945aea22SJiri Olsa .name = "mem:0", 912945aea22SJiri Olsa .check = test__checkevent_breakpoint, 913945aea22SJiri Olsa }, 914945aea22SJiri Olsa [9] = { 915945aea22SJiri Olsa .name = "mem:0:x", 916945aea22SJiri Olsa .check = test__checkevent_breakpoint_x, 917945aea22SJiri Olsa }, 918945aea22SJiri Olsa [10] = { 919945aea22SJiri Olsa .name = "mem:0:r", 920945aea22SJiri Olsa .check = test__checkevent_breakpoint_r, 921945aea22SJiri Olsa }, 922945aea22SJiri Olsa [11] = { 923945aea22SJiri Olsa .name = "mem:0:w", 924945aea22SJiri Olsa .check = test__checkevent_breakpoint_w, 925945aea22SJiri Olsa }, 926945aea22SJiri Olsa [12] = { 927945aea22SJiri Olsa .name = "syscalls:sys_enter_open:k", 928945aea22SJiri Olsa .check = test__checkevent_tracepoint_modifier, 929945aea22SJiri Olsa }, 930945aea22SJiri Olsa [13] = { 931945aea22SJiri Olsa .name = "syscalls:*:u", 932945aea22SJiri Olsa .check = test__checkevent_tracepoint_multi_modifier, 933945aea22SJiri Olsa }, 934945aea22SJiri Olsa [14] = { 935945aea22SJiri Olsa .name = "r1a:kp", 936945aea22SJiri Olsa .check = test__checkevent_raw_modifier, 937945aea22SJiri Olsa }, 938945aea22SJiri Olsa [15] = { 939945aea22SJiri Olsa .name = "1:1:hp", 940945aea22SJiri Olsa .check = test__checkevent_numeric_modifier, 941945aea22SJiri Olsa }, 942945aea22SJiri Olsa [16] = { 943945aea22SJiri Olsa .name = "instructions:h", 944945aea22SJiri Olsa .check = test__checkevent_symbolic_name_modifier, 945945aea22SJiri Olsa }, 946945aea22SJiri Olsa [17] = { 947945aea22SJiri Olsa .name = "faults:u", 948945aea22SJiri Olsa .check = test__checkevent_symbolic_alias_modifier, 949945aea22SJiri Olsa }, 950945aea22SJiri Olsa [18] = { 951945aea22SJiri Olsa .name = "L1-dcache-load-miss:kp", 952945aea22SJiri Olsa .check = test__checkevent_genhw_modifier, 953945aea22SJiri Olsa }, 954945aea22SJiri Olsa [19] = { 955945aea22SJiri Olsa .name = "mem:0:u", 956945aea22SJiri Olsa .check = test__checkevent_breakpoint_modifier, 957945aea22SJiri Olsa }, 958945aea22SJiri Olsa [20] = { 959945aea22SJiri Olsa .name = "mem:0:x:k", 960945aea22SJiri Olsa .check = test__checkevent_breakpoint_x_modifier, 961945aea22SJiri Olsa }, 962945aea22SJiri Olsa [21] = { 963945aea22SJiri Olsa .name = "mem:0:r:hp", 964945aea22SJiri Olsa .check = test__checkevent_breakpoint_r_modifier, 965945aea22SJiri Olsa }, 966945aea22SJiri Olsa [22] = { 967945aea22SJiri Olsa .name = "mem:0:w:up", 968945aea22SJiri Olsa .check = test__checkevent_breakpoint_w_modifier, 969945aea22SJiri Olsa }, 970945aea22SJiri Olsa [23] = { 971945aea22SJiri Olsa .name = "r1,syscalls:sys_enter_open:k,1:1:hp", 972945aea22SJiri Olsa .check = test__checkevent_list, 973945aea22SJiri Olsa }, 974945aea22SJiri Olsa [24] = { 975945aea22SJiri Olsa .name = "instructions:G", 976945aea22SJiri Olsa .check = test__checkevent_exclude_host_modifier, 977945aea22SJiri Olsa }, 978945aea22SJiri Olsa [25] = { 979945aea22SJiri Olsa .name = "instructions:H", 980945aea22SJiri Olsa .check = test__checkevent_exclude_guest_modifier, 981945aea22SJiri Olsa }, 982945aea22SJiri Olsa [26] = { 983945aea22SJiri Olsa .name = "mem:0:rw", 984945aea22SJiri Olsa .check = test__checkevent_breakpoint_rw, 985945aea22SJiri Olsa }, 986945aea22SJiri Olsa [27] = { 987945aea22SJiri Olsa .name = "mem:0:rw:kp", 988945aea22SJiri Olsa .check = test__checkevent_breakpoint_rw_modifier, 989945aea22SJiri Olsa }, 990945aea22SJiri Olsa [28] = { 991945aea22SJiri Olsa .name = "{instructions:k,cycles:upp}", 992945aea22SJiri Olsa .check = test__group1, 993945aea22SJiri Olsa }, 994945aea22SJiri Olsa [29] = { 995945aea22SJiri Olsa .name = "{faults:k,cache-references}:u,cycles:k", 996945aea22SJiri Olsa .check = test__group2, 997945aea22SJiri Olsa }, 998945aea22SJiri Olsa [30] = { 999945aea22SJiri Olsa .name = "group1{syscalls:sys_enter_open:H,cycles:kppp},group2{cycles,1:3}:G,instructions:u", 1000945aea22SJiri Olsa .check = test__group3, 1001945aea22SJiri Olsa }, 1002945aea22SJiri Olsa [31] = { 1003945aea22SJiri Olsa .name = "{cycles:u,instructions:kp}:p", 1004945aea22SJiri Olsa .check = test__group4, 1005945aea22SJiri Olsa }, 1006945aea22SJiri Olsa [32] = { 1007945aea22SJiri Olsa .name = "{cycles,instructions}:G,{cycles:G,instructions:G},cycles", 1008945aea22SJiri Olsa .check = test__group5, 1009945aea22SJiri Olsa }, 101082ce75d9SJiri Olsa [33] = { 101182ce75d9SJiri Olsa .name = "*:*", 101282ce75d9SJiri Olsa .check = test__all_tracepoints, 101382ce75d9SJiri Olsa }, 1014945aea22SJiri Olsa }; 1015945aea22SJiri Olsa 101623b6339bSArnaldo Carvalho de Melo static struct evlist_test test__events_pmu[] = { 1017945aea22SJiri Olsa [0] = { 1018945aea22SJiri Olsa .name = "cpu/config=10,config1,config2=3,period=1000/u", 1019945aea22SJiri Olsa .check = test__checkevent_pmu, 1020945aea22SJiri Olsa }, 1021945aea22SJiri Olsa [1] = { 1022945aea22SJiri Olsa .name = "cpu/config=1,name=krava/u,cpu/config=2/u", 1023945aea22SJiri Olsa .check = test__checkevent_pmu_name, 1024945aea22SJiri Olsa }, 1025945aea22SJiri Olsa }; 1026945aea22SJiri Olsa 102723b6339bSArnaldo Carvalho de Melo struct terms_test { 1028945aea22SJiri Olsa const char *str; 1029945aea22SJiri Olsa __u32 type; 1030945aea22SJiri Olsa int (*check)(struct list_head *terms); 1031945aea22SJiri Olsa }; 1032945aea22SJiri Olsa 103323b6339bSArnaldo Carvalho de Melo static struct terms_test test__terms[] = { 1034945aea22SJiri Olsa [0] = { 1035945aea22SJiri Olsa .str = "config=10,config1,config2=3,umask=1", 1036945aea22SJiri Olsa .check = test__checkterms_simple, 1037945aea22SJiri Olsa }, 1038945aea22SJiri Olsa }; 1039945aea22SJiri Olsa 104023b6339bSArnaldo Carvalho de Melo static int test_event(struct evlist_test *e) 1041945aea22SJiri Olsa { 1042945aea22SJiri Olsa struct perf_evlist *evlist; 1043945aea22SJiri Olsa int ret; 1044945aea22SJiri Olsa 1045945aea22SJiri Olsa evlist = perf_evlist__new(NULL, NULL); 1046945aea22SJiri Olsa if (evlist == NULL) 1047945aea22SJiri Olsa return -ENOMEM; 1048945aea22SJiri Olsa 1049d8f7bbc9SJiri Olsa ret = parse_events(evlist, e->name); 1050945aea22SJiri Olsa if (ret) { 1051945aea22SJiri Olsa pr_debug("failed to parse event '%s', err %d\n", 1052945aea22SJiri Olsa e->name, ret); 1053945aea22SJiri Olsa return ret; 1054945aea22SJiri Olsa } 1055945aea22SJiri Olsa 1056945aea22SJiri Olsa ret = e->check(evlist); 1057945aea22SJiri Olsa perf_evlist__delete(evlist); 1058945aea22SJiri Olsa 1059945aea22SJiri Olsa return ret; 1060945aea22SJiri Olsa } 1061945aea22SJiri Olsa 106223b6339bSArnaldo Carvalho de Melo static int test_events(struct evlist_test *events, unsigned cnt) 1063945aea22SJiri Olsa { 1064945aea22SJiri Olsa int ret1, ret2 = 0; 1065945aea22SJiri Olsa unsigned i; 1066945aea22SJiri Olsa 1067945aea22SJiri Olsa for (i = 0; i < cnt; i++) { 106823b6339bSArnaldo Carvalho de Melo struct evlist_test *e = &events[i]; 1069945aea22SJiri Olsa 1070945aea22SJiri Olsa pr_debug("running test %d '%s'\n", i, e->name); 1071945aea22SJiri Olsa ret1 = test_event(e); 1072945aea22SJiri Olsa if (ret1) 1073945aea22SJiri Olsa ret2 = ret1; 1074945aea22SJiri Olsa } 1075945aea22SJiri Olsa 1076945aea22SJiri Olsa return ret2; 1077945aea22SJiri Olsa } 1078945aea22SJiri Olsa 107923b6339bSArnaldo Carvalho de Melo static int test_term(struct terms_test *t) 1080945aea22SJiri Olsa { 1081945aea22SJiri Olsa struct list_head *terms; 1082945aea22SJiri Olsa int ret; 1083945aea22SJiri Olsa 1084945aea22SJiri Olsa terms = malloc(sizeof(*terms)); 1085945aea22SJiri Olsa if (!terms) 1086945aea22SJiri Olsa return -ENOMEM; 1087945aea22SJiri Olsa 1088945aea22SJiri Olsa INIT_LIST_HEAD(terms); 1089945aea22SJiri Olsa 1090945aea22SJiri Olsa ret = parse_events_terms(terms, t->str); 1091945aea22SJiri Olsa if (ret) { 1092945aea22SJiri Olsa pr_debug("failed to parse terms '%s', err %d\n", 1093945aea22SJiri Olsa t->str , ret); 1094945aea22SJiri Olsa return ret; 1095945aea22SJiri Olsa } 1096945aea22SJiri Olsa 1097945aea22SJiri Olsa ret = t->check(terms); 1098945aea22SJiri Olsa parse_events__free_terms(terms); 1099945aea22SJiri Olsa 1100945aea22SJiri Olsa return ret; 1101945aea22SJiri Olsa } 1102945aea22SJiri Olsa 110323b6339bSArnaldo Carvalho de Melo static int test_terms(struct terms_test *terms, unsigned cnt) 1104945aea22SJiri Olsa { 1105945aea22SJiri Olsa int ret = 0; 1106945aea22SJiri Olsa unsigned i; 1107945aea22SJiri Olsa 1108945aea22SJiri Olsa for (i = 0; i < cnt; i++) { 110923b6339bSArnaldo Carvalho de Melo struct terms_test *t = &terms[i]; 1110945aea22SJiri Olsa 1111945aea22SJiri Olsa pr_debug("running test %d '%s'\n", i, t->str); 1112945aea22SJiri Olsa ret = test_term(t); 1113945aea22SJiri Olsa if (ret) 1114945aea22SJiri Olsa break; 1115945aea22SJiri Olsa } 1116945aea22SJiri Olsa 1117945aea22SJiri Olsa return ret; 1118945aea22SJiri Olsa } 1119945aea22SJiri Olsa 1120945aea22SJiri Olsa static int test_pmu(void) 1121945aea22SJiri Olsa { 1122945aea22SJiri Olsa struct stat st; 1123945aea22SJiri Olsa char path[PATH_MAX]; 1124945aea22SJiri Olsa int ret; 1125945aea22SJiri Olsa 1126945aea22SJiri Olsa snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/format/", 1127945aea22SJiri Olsa sysfs_find_mountpoint()); 1128945aea22SJiri Olsa 1129945aea22SJiri Olsa ret = stat(path, &st); 1130945aea22SJiri Olsa if (ret) 1131945aea22SJiri Olsa pr_debug("omitting PMU cpu tests\n"); 1132945aea22SJiri Olsa return !ret; 1133945aea22SJiri Olsa } 1134945aea22SJiri Olsa 1135945aea22SJiri Olsa static int test_pmu_events(void) 1136945aea22SJiri Olsa { 1137945aea22SJiri Olsa struct stat st; 1138945aea22SJiri Olsa char path[PATH_MAX]; 1139945aea22SJiri Olsa struct dirent *ent; 1140945aea22SJiri Olsa DIR *dir; 1141945aea22SJiri Olsa int ret; 1142945aea22SJiri Olsa 1143945aea22SJiri Olsa snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/events/", 1144945aea22SJiri Olsa sysfs_find_mountpoint()); 1145945aea22SJiri Olsa 1146945aea22SJiri Olsa ret = stat(path, &st); 1147945aea22SJiri Olsa if (ret) { 1148945aea22SJiri Olsa pr_debug("ommiting PMU cpu events tests\n"); 1149945aea22SJiri Olsa return 0; 1150945aea22SJiri Olsa } 1151945aea22SJiri Olsa 1152945aea22SJiri Olsa dir = opendir(path); 1153945aea22SJiri Olsa if (!dir) { 1154945aea22SJiri Olsa pr_debug("can't open pmu event dir"); 1155945aea22SJiri Olsa return -1; 1156945aea22SJiri Olsa } 1157945aea22SJiri Olsa 1158945aea22SJiri Olsa while (!ret && (ent = readdir(dir))) { 1159945aea22SJiri Olsa #define MAX_NAME 100 116023b6339bSArnaldo Carvalho de Melo struct evlist_test e; 1161945aea22SJiri Olsa char name[MAX_NAME]; 1162945aea22SJiri Olsa 1163945aea22SJiri Olsa if (!strcmp(ent->d_name, ".") || 1164945aea22SJiri Olsa !strcmp(ent->d_name, "..")) 1165945aea22SJiri Olsa continue; 1166945aea22SJiri Olsa 1167945aea22SJiri Olsa snprintf(name, MAX_NAME, "cpu/event=%s/u", ent->d_name); 1168945aea22SJiri Olsa 1169945aea22SJiri Olsa e.name = name; 1170945aea22SJiri Olsa e.check = test__checkevent_pmu_events; 1171945aea22SJiri Olsa 1172945aea22SJiri Olsa ret = test_event(&e); 1173945aea22SJiri Olsa #undef MAX_NAME 1174945aea22SJiri Olsa } 1175945aea22SJiri Olsa 1176945aea22SJiri Olsa closedir(dir); 1177945aea22SJiri Olsa return ret; 1178945aea22SJiri Olsa } 1179945aea22SJiri Olsa 1180c81251e8SJiri Olsa int test__parse_events(void) 1181945aea22SJiri Olsa { 1182945aea22SJiri Olsa int ret1, ret2 = 0; 1183945aea22SJiri Olsa 1184945aea22SJiri Olsa #define TEST_EVENTS(tests) \ 1185945aea22SJiri Olsa do { \ 1186945aea22SJiri Olsa ret1 = test_events(tests, ARRAY_SIZE(tests)); \ 1187945aea22SJiri Olsa if (!ret2) \ 1188945aea22SJiri Olsa ret2 = ret1; \ 1189945aea22SJiri Olsa } while (0) 1190945aea22SJiri Olsa 1191945aea22SJiri Olsa TEST_EVENTS(test__events); 1192945aea22SJiri Olsa 1193945aea22SJiri Olsa if (test_pmu()) 1194945aea22SJiri Olsa TEST_EVENTS(test__events_pmu); 1195945aea22SJiri Olsa 1196945aea22SJiri Olsa if (test_pmu()) { 1197945aea22SJiri Olsa int ret = test_pmu_events(); 1198945aea22SJiri Olsa if (ret) 1199945aea22SJiri Olsa return ret; 1200945aea22SJiri Olsa } 1201945aea22SJiri Olsa 1202945aea22SJiri Olsa ret1 = test_terms(test__terms, ARRAY_SIZE(test__terms)); 1203945aea22SJiri Olsa if (!ret2) 1204945aea22SJiri Olsa ret2 = ret1; 1205945aea22SJiri Olsa 1206945aea22SJiri Olsa return ret2; 1207945aea22SJiri Olsa } 1208