1945aea22SJiri Olsa 2945aea22SJiri Olsa #include "parse-events.h" 3945aea22SJiri Olsa #include "evsel.h" 4945aea22SJiri Olsa #include "evlist.h" 5945aea22SJiri Olsa #include "sysfs.h" 6945aea22SJiri Olsa #include "../../../include/linux/hw_breakpoint.h" 7*c81251e8SJiri Olsa #include "tests.h" 8945aea22SJiri Olsa 9945aea22SJiri Olsa #define TEST_ASSERT_VAL(text, cond) \ 10945aea22SJiri Olsa do { \ 11945aea22SJiri Olsa if (!(cond)) { \ 12945aea22SJiri Olsa pr_debug("FAILED %s:%d %s\n", __FILE__, __LINE__, text); \ 13945aea22SJiri Olsa return -1; \ 14945aea22SJiri Olsa } \ 15945aea22SJiri Olsa } while (0) 16945aea22SJiri Olsa 17945aea22SJiri Olsa #define PERF_TP_SAMPLE_TYPE (PERF_SAMPLE_RAW | PERF_SAMPLE_TIME | \ 18945aea22SJiri Olsa PERF_SAMPLE_CPU | PERF_SAMPLE_PERIOD) 19945aea22SJiri Olsa 20945aea22SJiri Olsa static int test__checkevent_tracepoint(struct perf_evlist *evlist) 21945aea22SJiri Olsa { 22945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 23945aea22SJiri Olsa 24945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 25945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->attr.type); 26945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 27945aea22SJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->attr.sample_type); 28945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->attr.sample_period); 29945aea22SJiri Olsa return 0; 30945aea22SJiri Olsa } 31945aea22SJiri Olsa 32945aea22SJiri Olsa static int test__checkevent_tracepoint_multi(struct perf_evlist *evlist) 33945aea22SJiri Olsa { 34945aea22SJiri Olsa struct perf_evsel *evsel; 35945aea22SJiri Olsa 36945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", evlist->nr_entries > 1); 37945aea22SJiri Olsa 38945aea22SJiri Olsa list_for_each_entry(evsel, &evlist->entries, node) { 39945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 40945aea22SJiri Olsa PERF_TYPE_TRACEPOINT == evsel->attr.type); 41945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 42945aea22SJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->attr.sample_type); 43945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 44945aea22SJiri Olsa 1 == evsel->attr.sample_period); 45945aea22SJiri Olsa } 46945aea22SJiri Olsa return 0; 47945aea22SJiri Olsa } 48945aea22SJiri Olsa 49945aea22SJiri Olsa static int test__checkevent_raw(struct perf_evlist *evlist) 50945aea22SJiri Olsa { 51945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 52945aea22SJiri Olsa 53945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 54945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); 55945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 0x1a == evsel->attr.config); 56945aea22SJiri Olsa return 0; 57945aea22SJiri Olsa } 58945aea22SJiri Olsa 59945aea22SJiri Olsa static int test__checkevent_numeric(struct perf_evlist *evlist) 60945aea22SJiri Olsa { 61945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 62945aea22SJiri Olsa 63945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 64945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->attr.type); 65945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config); 66945aea22SJiri Olsa return 0; 67945aea22SJiri Olsa } 68945aea22SJiri Olsa 69945aea22SJiri Olsa static int test__checkevent_symbolic_name(struct perf_evlist *evlist) 70945aea22SJiri Olsa { 71945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 72945aea22SJiri Olsa 73945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 74945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 75945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 76945aea22SJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); 77945aea22SJiri Olsa return 0; 78945aea22SJiri Olsa } 79945aea22SJiri Olsa 80945aea22SJiri Olsa static int test__checkevent_symbolic_name_config(struct perf_evlist *evlist) 81945aea22SJiri Olsa { 82945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 83945aea22SJiri Olsa 84945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 85945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 86945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 87945aea22SJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 88945aea22SJiri Olsa TEST_ASSERT_VAL("wrong period", 89945aea22SJiri Olsa 100000 == evsel->attr.sample_period); 90945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config1", 91945aea22SJiri Olsa 0 == evsel->attr.config1); 92945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config2", 93945aea22SJiri Olsa 1 == evsel->attr.config2); 94945aea22SJiri Olsa return 0; 95945aea22SJiri Olsa } 96945aea22SJiri Olsa 97945aea22SJiri Olsa static int test__checkevent_symbolic_alias(struct perf_evlist *evlist) 98945aea22SJiri Olsa { 99945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 100945aea22SJiri Olsa 101945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 102945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->attr.type); 103945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 104945aea22SJiri Olsa PERF_COUNT_SW_PAGE_FAULTS == evsel->attr.config); 105945aea22SJiri Olsa return 0; 106945aea22SJiri Olsa } 107945aea22SJiri Olsa 108945aea22SJiri Olsa static int test__checkevent_genhw(struct perf_evlist *evlist) 109945aea22SJiri Olsa { 110945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 111945aea22SJiri Olsa 112945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 113945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HW_CACHE == evsel->attr.type); 114945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", (1 << 16) == evsel->attr.config); 115945aea22SJiri Olsa return 0; 116945aea22SJiri Olsa } 117945aea22SJiri Olsa 118945aea22SJiri Olsa static int test__checkevent_breakpoint(struct perf_evlist *evlist) 119945aea22SJiri Olsa { 120945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 121945aea22SJiri Olsa 122945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 123945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->attr.type); 124945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config); 125945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) == 126945aea22SJiri Olsa evsel->attr.bp_type); 127945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_4 == 128945aea22SJiri Olsa evsel->attr.bp_len); 129945aea22SJiri Olsa return 0; 130945aea22SJiri Olsa } 131945aea22SJiri Olsa 132945aea22SJiri Olsa static int test__checkevent_breakpoint_x(struct perf_evlist *evlist) 133945aea22SJiri Olsa { 134945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 135945aea22SJiri Olsa 136945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 137945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->attr.type); 138945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config); 139945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 140945aea22SJiri Olsa HW_BREAKPOINT_X == evsel->attr.bp_type); 141945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", sizeof(long) == evsel->attr.bp_len); 142945aea22SJiri Olsa return 0; 143945aea22SJiri Olsa } 144945aea22SJiri Olsa 145945aea22SJiri Olsa static int test__checkevent_breakpoint_r(struct perf_evlist *evlist) 146945aea22SJiri Olsa { 147945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 148945aea22SJiri Olsa 149945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 150945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 151945aea22SJiri Olsa PERF_TYPE_BREAKPOINT == evsel->attr.type); 152945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config); 153945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 154945aea22SJiri Olsa HW_BREAKPOINT_R == evsel->attr.bp_type); 155945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", 156945aea22SJiri Olsa HW_BREAKPOINT_LEN_4 == evsel->attr.bp_len); 157945aea22SJiri Olsa return 0; 158945aea22SJiri Olsa } 159945aea22SJiri Olsa 160945aea22SJiri Olsa static int test__checkevent_breakpoint_w(struct perf_evlist *evlist) 161945aea22SJiri Olsa { 162945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 163945aea22SJiri Olsa 164945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 165945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 166945aea22SJiri Olsa PERF_TYPE_BREAKPOINT == evsel->attr.type); 167945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config); 168945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 169945aea22SJiri Olsa HW_BREAKPOINT_W == evsel->attr.bp_type); 170945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", 171945aea22SJiri Olsa HW_BREAKPOINT_LEN_4 == evsel->attr.bp_len); 172945aea22SJiri Olsa return 0; 173945aea22SJiri Olsa } 174945aea22SJiri Olsa 175945aea22SJiri Olsa static int test__checkevent_breakpoint_rw(struct perf_evlist *evlist) 176945aea22SJiri Olsa { 177945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 178945aea22SJiri Olsa 179945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 180945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 181945aea22SJiri Olsa PERF_TYPE_BREAKPOINT == evsel->attr.type); 182945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config); 183945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 184945aea22SJiri Olsa (HW_BREAKPOINT_R|HW_BREAKPOINT_W) == evsel->attr.bp_type); 185945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", 186945aea22SJiri Olsa HW_BREAKPOINT_LEN_4 == evsel->attr.bp_len); 187945aea22SJiri Olsa return 0; 188945aea22SJiri Olsa } 189945aea22SJiri Olsa 190945aea22SJiri Olsa static int test__checkevent_tracepoint_modifier(struct perf_evlist *evlist) 191945aea22SJiri Olsa { 192945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 193945aea22SJiri Olsa 194945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 195945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 196945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 197945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 198945aea22SJiri Olsa 199945aea22SJiri Olsa return test__checkevent_tracepoint(evlist); 200945aea22SJiri Olsa } 201945aea22SJiri Olsa 202945aea22SJiri Olsa static int 203945aea22SJiri Olsa test__checkevent_tracepoint_multi_modifier(struct perf_evlist *evlist) 204945aea22SJiri Olsa { 205945aea22SJiri Olsa struct perf_evsel *evsel; 206945aea22SJiri Olsa 207945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", evlist->nr_entries > 1); 208945aea22SJiri Olsa 209945aea22SJiri Olsa list_for_each_entry(evsel, &evlist->entries, node) { 210945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", 211945aea22SJiri Olsa !evsel->attr.exclude_user); 212945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", 213945aea22SJiri Olsa evsel->attr.exclude_kernel); 214945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 215945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 216945aea22SJiri Olsa } 217945aea22SJiri Olsa 218945aea22SJiri Olsa return test__checkevent_tracepoint_multi(evlist); 219945aea22SJiri Olsa } 220945aea22SJiri Olsa 221945aea22SJiri Olsa static int test__checkevent_raw_modifier(struct perf_evlist *evlist) 222945aea22SJiri Olsa { 223945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 224945aea22SJiri Olsa 225945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 226945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 227945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 228945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 229945aea22SJiri Olsa 230945aea22SJiri Olsa return test__checkevent_raw(evlist); 231945aea22SJiri Olsa } 232945aea22SJiri Olsa 233945aea22SJiri Olsa static int test__checkevent_numeric_modifier(struct perf_evlist *evlist) 234945aea22SJiri Olsa { 235945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 236945aea22SJiri Olsa 237945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 238945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 239945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 240945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 241945aea22SJiri Olsa 242945aea22SJiri Olsa return test__checkevent_numeric(evlist); 243945aea22SJiri Olsa } 244945aea22SJiri Olsa 245945aea22SJiri Olsa static int test__checkevent_symbolic_name_modifier(struct perf_evlist *evlist) 246945aea22SJiri Olsa { 247945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 248945aea22SJiri Olsa 249945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 250945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 251945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 252945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 253945aea22SJiri Olsa 254945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 255945aea22SJiri Olsa } 256945aea22SJiri Olsa 257945aea22SJiri Olsa static int test__checkevent_exclude_host_modifier(struct perf_evlist *evlist) 258945aea22SJiri Olsa { 259945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 260945aea22SJiri Olsa 261945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 262945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 263945aea22SJiri Olsa 264945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 265945aea22SJiri Olsa } 266945aea22SJiri Olsa 267945aea22SJiri Olsa static int test__checkevent_exclude_guest_modifier(struct perf_evlist *evlist) 268945aea22SJiri Olsa { 269945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 270945aea22SJiri Olsa 271945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 272945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 273945aea22SJiri Olsa 274945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 275945aea22SJiri Olsa } 276945aea22SJiri Olsa 277945aea22SJiri Olsa static int test__checkevent_symbolic_alias_modifier(struct perf_evlist *evlist) 278945aea22SJiri Olsa { 279945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 280945aea22SJiri Olsa 281945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 282945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 283945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 284945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 285945aea22SJiri Olsa 286945aea22SJiri Olsa return test__checkevent_symbolic_alias(evlist); 287945aea22SJiri Olsa } 288945aea22SJiri Olsa 289945aea22SJiri Olsa static int test__checkevent_genhw_modifier(struct perf_evlist *evlist) 290945aea22SJiri Olsa { 291945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 292945aea22SJiri Olsa 293945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 294945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 295945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 296945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 297945aea22SJiri Olsa 298945aea22SJiri Olsa return test__checkevent_genhw(evlist); 299945aea22SJiri Olsa } 300945aea22SJiri Olsa 301945aea22SJiri Olsa static int test__checkevent_breakpoint_modifier(struct perf_evlist *evlist) 302945aea22SJiri Olsa { 303945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 304945aea22SJiri Olsa 305945aea22SJiri Olsa 306945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 307945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 308945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 309945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 310945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 311945aea22SJiri Olsa !strcmp(perf_evsel__name(evsel), "mem:0:u")); 312945aea22SJiri Olsa 313945aea22SJiri Olsa return test__checkevent_breakpoint(evlist); 314945aea22SJiri Olsa } 315945aea22SJiri Olsa 316945aea22SJiri Olsa static int test__checkevent_breakpoint_x_modifier(struct perf_evlist *evlist) 317945aea22SJiri Olsa { 318945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 319945aea22SJiri Olsa 320945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 321945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 322945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 323945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 324945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 325945aea22SJiri Olsa !strcmp(perf_evsel__name(evsel), "mem:0:x:k")); 326945aea22SJiri Olsa 327945aea22SJiri Olsa return test__checkevent_breakpoint_x(evlist); 328945aea22SJiri Olsa } 329945aea22SJiri Olsa 330945aea22SJiri Olsa static int test__checkevent_breakpoint_r_modifier(struct perf_evlist *evlist) 331945aea22SJiri Olsa { 332945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 333945aea22SJiri Olsa 334945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 335945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 336945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 337945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 338945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 339945aea22SJiri Olsa !strcmp(perf_evsel__name(evsel), "mem:0:r:hp")); 340945aea22SJiri Olsa 341945aea22SJiri Olsa return test__checkevent_breakpoint_r(evlist); 342945aea22SJiri Olsa } 343945aea22SJiri Olsa 344945aea22SJiri Olsa static int test__checkevent_breakpoint_w_modifier(struct perf_evlist *evlist) 345945aea22SJiri Olsa { 346945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 347945aea22SJiri Olsa 348945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 349945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 350945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 351945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 352945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 353945aea22SJiri Olsa !strcmp(perf_evsel__name(evsel), "mem:0:w:up")); 354945aea22SJiri Olsa 355945aea22SJiri Olsa return test__checkevent_breakpoint_w(evlist); 356945aea22SJiri Olsa } 357945aea22SJiri Olsa 358945aea22SJiri Olsa static int test__checkevent_breakpoint_rw_modifier(struct perf_evlist *evlist) 359945aea22SJiri Olsa { 360945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 361945aea22SJiri Olsa 362945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 363945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 364945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 365945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 366945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 367945aea22SJiri Olsa !strcmp(perf_evsel__name(evsel), "mem:0:rw:kp")); 368945aea22SJiri Olsa 369945aea22SJiri Olsa return test__checkevent_breakpoint_rw(evlist); 370945aea22SJiri Olsa } 371945aea22SJiri Olsa 372945aea22SJiri Olsa static int test__checkevent_pmu(struct perf_evlist *evlist) 373945aea22SJiri Olsa { 374945aea22SJiri Olsa 375945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 376945aea22SJiri Olsa 377945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 378945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); 379945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 10 == evsel->attr.config); 380945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config1", 1 == evsel->attr.config1); 381945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config2", 3 == evsel->attr.config2); 382945aea22SJiri Olsa TEST_ASSERT_VAL("wrong period", 1000 == evsel->attr.sample_period); 383945aea22SJiri Olsa 384945aea22SJiri Olsa return 0; 385945aea22SJiri Olsa } 386945aea22SJiri Olsa 387945aea22SJiri Olsa static int test__checkevent_list(struct perf_evlist *evlist) 388945aea22SJiri Olsa { 389945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 390945aea22SJiri Olsa 391945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->nr_entries); 392945aea22SJiri Olsa 393945aea22SJiri Olsa /* r1 */ 394945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); 395945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config); 396945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config1", 0 == evsel->attr.config1); 397945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config2", 0 == evsel->attr.config2); 398945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 399945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 400945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 401945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 402945aea22SJiri Olsa 403945aea22SJiri Olsa /* syscalls:sys_enter_open:k */ 404945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 405945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->attr.type); 406945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 407945aea22SJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->attr.sample_type); 408945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->attr.sample_period); 409945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 410945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 411945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 412945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 413945aea22SJiri Olsa 414945aea22SJiri Olsa /* 1:1:hp */ 415945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 416945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->attr.type); 417945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config); 418945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 419945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 420945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 421945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 422945aea22SJiri Olsa 423945aea22SJiri Olsa return 0; 424945aea22SJiri Olsa } 425945aea22SJiri Olsa 426945aea22SJiri Olsa static int test__checkevent_pmu_name(struct perf_evlist *evlist) 427945aea22SJiri Olsa { 428945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 429945aea22SJiri Olsa 430945aea22SJiri Olsa /* cpu/config=1,name=krava/u */ 431945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); 432945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); 433945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config); 434945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", !strcmp(perf_evsel__name(evsel), "krava")); 435945aea22SJiri Olsa 436945aea22SJiri Olsa /* cpu/config=2/u" */ 437945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 438945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); 439945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); 440945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 2 == evsel->attr.config); 441945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 442945aea22SJiri Olsa !strcmp(perf_evsel__name(evsel), "cpu/config=2/u")); 443945aea22SJiri Olsa 444945aea22SJiri Olsa return 0; 445945aea22SJiri Olsa } 446945aea22SJiri Olsa 447945aea22SJiri Olsa static int test__checkevent_pmu_events(struct perf_evlist *evlist) 448945aea22SJiri Olsa { 449945aea22SJiri Olsa struct perf_evsel *evsel; 450945aea22SJiri Olsa 451945aea22SJiri Olsa evsel = list_entry(evlist->entries.next, struct perf_evsel, node); 452945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 453945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); 454945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", 455945aea22SJiri Olsa !evsel->attr.exclude_user); 456945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", 457945aea22SJiri Olsa evsel->attr.exclude_kernel); 458945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 459945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 460945aea22SJiri Olsa 461945aea22SJiri Olsa return 0; 462945aea22SJiri Olsa } 463945aea22SJiri Olsa 464945aea22SJiri Olsa static int test__checkterms_simple(struct list_head *terms) 465945aea22SJiri Olsa { 466945aea22SJiri Olsa struct parse_events__term *term; 467945aea22SJiri Olsa 468945aea22SJiri Olsa /* config=10 */ 469945aea22SJiri Olsa term = list_entry(terms->next, struct parse_events__term, list); 470945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 471945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG); 472945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 473945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 474945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 10); 475945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", !term->config); 476945aea22SJiri Olsa 477945aea22SJiri Olsa /* config1 */ 478945aea22SJiri Olsa term = list_entry(term->list.next, struct parse_events__term, list); 479945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 480945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG1); 481945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 482945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 483945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 1); 484945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", !term->config); 485945aea22SJiri Olsa 486945aea22SJiri Olsa /* config2=3 */ 487945aea22SJiri Olsa term = list_entry(term->list.next, struct parse_events__term, list); 488945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 489945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG2); 490945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 491945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 492945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 3); 493945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", !term->config); 494945aea22SJiri Olsa 495945aea22SJiri Olsa /* umask=1*/ 496945aea22SJiri Olsa term = list_entry(term->list.next, struct parse_events__term, list); 497945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 498945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_USER); 499945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 500945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 501945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 1); 502945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "umask")); 503945aea22SJiri Olsa 504945aea22SJiri Olsa return 0; 505945aea22SJiri Olsa } 506945aea22SJiri Olsa 507945aea22SJiri Olsa static int test__group1(struct perf_evlist *evlist) 508945aea22SJiri Olsa { 509945aea22SJiri Olsa struct perf_evsel *evsel, *leader; 510945aea22SJiri Olsa 511945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); 512945aea22SJiri Olsa 513945aea22SJiri Olsa /* instructions:k */ 514945aea22SJiri Olsa evsel = leader = perf_evlist__first(evlist); 515945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 516945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 517945aea22SJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); 518945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 519945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 520945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 521945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 522945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 523945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 524945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == NULL); 525945aea22SJiri Olsa 526945aea22SJiri Olsa /* cycles:upp */ 527945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 528945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 529945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 530945aea22SJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 531945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 532945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 533945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 534945aea22SJiri Olsa /* use of precise requires exclude_guest */ 535945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 536945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 537945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 2); 538945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 539945aea22SJiri Olsa 540945aea22SJiri Olsa return 0; 541945aea22SJiri Olsa } 542945aea22SJiri Olsa 543945aea22SJiri Olsa static int test__group2(struct perf_evlist *evlist) 544945aea22SJiri Olsa { 545945aea22SJiri Olsa struct perf_evsel *evsel, *leader; 546945aea22SJiri Olsa 547945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->nr_entries); 548945aea22SJiri Olsa 549945aea22SJiri Olsa /* faults + :ku modifier */ 550945aea22SJiri Olsa evsel = leader = perf_evlist__first(evlist); 551945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->attr.type); 552945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 553945aea22SJiri Olsa PERF_COUNT_SW_PAGE_FAULTS == evsel->attr.config); 554945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 555945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 556945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 557945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 558945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 559945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 560945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == NULL); 561945aea22SJiri Olsa 562945aea22SJiri Olsa /* cache-references + :u modifier */ 563945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 564945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 565945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 566945aea22SJiri Olsa PERF_COUNT_HW_CACHE_REFERENCES == evsel->attr.config); 567945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 568945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 569945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 570945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 571945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 572945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 573945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 574945aea22SJiri Olsa 575945aea22SJiri Olsa /* cycles:k */ 576945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 577945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 578945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 579945aea22SJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 580945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 581945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 582945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 583945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 584945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 585945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 586945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == NULL); 587945aea22SJiri Olsa 588945aea22SJiri Olsa return 0; 589945aea22SJiri Olsa } 590945aea22SJiri Olsa 591945aea22SJiri Olsa static int test__group3(struct perf_evlist *evlist __maybe_unused) 592945aea22SJiri Olsa { 593945aea22SJiri Olsa struct perf_evsel *evsel, *leader; 594945aea22SJiri Olsa 595945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->nr_entries); 596945aea22SJiri Olsa 597945aea22SJiri Olsa /* group1 syscalls:sys_enter_open:H */ 598945aea22SJiri Olsa evsel = leader = perf_evlist__first(evlist); 599945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->attr.type); 600945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 601945aea22SJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->attr.sample_type); 602945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->attr.sample_period); 603945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 604945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 605945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 606945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 607945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 608945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 609945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == NULL); 610945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", 611945aea22SJiri Olsa !strcmp(leader->group_name, "group1")); 612945aea22SJiri Olsa 613945aea22SJiri Olsa /* group1 cycles:kppp */ 614945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 615945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 616945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 617945aea22SJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 618945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 619945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 620945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 621945aea22SJiri Olsa /* use of precise requires exclude_guest */ 622945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 623945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 624945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 3); 625945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 626945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 627945aea22SJiri Olsa 628945aea22SJiri Olsa /* group2 cycles + G modifier */ 629945aea22SJiri Olsa evsel = leader = perf_evsel__next(evsel); 630945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 631945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 632945aea22SJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 633945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 634945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 635945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 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); 639945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == NULL); 640945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", 641945aea22SJiri Olsa !strcmp(leader->group_name, "group2")); 642945aea22SJiri Olsa 643945aea22SJiri Olsa /* group2 1:3 + G modifier */ 644945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 645945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->attr.type); 646945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 3 == evsel->attr.config); 647945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 648945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 649945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 650945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 651945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 652945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 653945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 654945aea22SJiri Olsa 655945aea22SJiri Olsa /* instructions:u */ 656945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 657945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 658945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 659945aea22SJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); 660945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 661945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 662945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 663945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 664945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 665945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 666945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == NULL); 667945aea22SJiri Olsa 668945aea22SJiri Olsa return 0; 669945aea22SJiri Olsa } 670945aea22SJiri Olsa 671945aea22SJiri Olsa static int test__group4(struct perf_evlist *evlist __maybe_unused) 672945aea22SJiri Olsa { 673945aea22SJiri Olsa struct perf_evsel *evsel, *leader; 674945aea22SJiri Olsa 675945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); 676945aea22SJiri Olsa 677945aea22SJiri Olsa /* cycles:u + p */ 678945aea22SJiri Olsa evsel = leader = perf_evlist__first(evlist); 679945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 680945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 681945aea22SJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 682945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 683945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 684945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 685945aea22SJiri Olsa /* use of precise requires exclude_guest */ 686945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 687945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 688945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 1); 689945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 690945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == NULL); 691945aea22SJiri Olsa 692945aea22SJiri Olsa /* instructions:kp + p */ 693945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 694945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 695945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 696945aea22SJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); 697945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 698945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 699945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 700945aea22SJiri Olsa /* use of precise requires exclude_guest */ 701945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 702945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 703945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 2); 704945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 705945aea22SJiri Olsa 706945aea22SJiri Olsa return 0; 707945aea22SJiri Olsa } 708945aea22SJiri Olsa 709945aea22SJiri Olsa static int test__group5(struct perf_evlist *evlist __maybe_unused) 710945aea22SJiri Olsa { 711945aea22SJiri Olsa struct perf_evsel *evsel, *leader; 712945aea22SJiri Olsa 713945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->nr_entries); 714945aea22SJiri Olsa 715945aea22SJiri Olsa /* cycles + G */ 716945aea22SJiri Olsa evsel = leader = perf_evlist__first(evlist); 717945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 718945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 719945aea22SJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 720945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 721945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 722945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 723945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 724945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 725945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 726945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 727945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == NULL); 728945aea22SJiri Olsa 729945aea22SJiri Olsa /* instructions + G */ 730945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 731945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 732945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 733945aea22SJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); 734945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 735945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 736945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 737945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 738945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 739945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 740945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 741945aea22SJiri Olsa 742945aea22SJiri Olsa /* cycles:G */ 743945aea22SJiri Olsa evsel = leader = perf_evsel__next(evsel); 744945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 745945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 746945aea22SJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 747945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 748945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 749945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 750945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 751945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 752945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 753945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 754945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == NULL); 755945aea22SJiri Olsa 756945aea22SJiri Olsa /* instructions:G */ 757945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 758945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 759945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 760945aea22SJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); 761945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 762945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 763945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 764945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 765945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 766945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 767945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 768945aea22SJiri Olsa 769945aea22SJiri Olsa /* cycles */ 770945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 771945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 772945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 773945aea22SJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 774945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 775945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 776945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 777945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 778945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 779945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 780945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == NULL); 781945aea22SJiri Olsa 782945aea22SJiri Olsa return 0; 783945aea22SJiri Olsa } 784945aea22SJiri Olsa 785945aea22SJiri Olsa struct test__event_st { 786945aea22SJiri Olsa const char *name; 787945aea22SJiri Olsa __u32 type; 788945aea22SJiri Olsa int (*check)(struct perf_evlist *evlist); 789945aea22SJiri Olsa }; 790945aea22SJiri Olsa 791945aea22SJiri Olsa static struct test__event_st test__events[] = { 792945aea22SJiri Olsa [0] = { 793945aea22SJiri Olsa .name = "syscalls:sys_enter_open", 794945aea22SJiri Olsa .check = test__checkevent_tracepoint, 795945aea22SJiri Olsa }, 796945aea22SJiri Olsa [1] = { 797945aea22SJiri Olsa .name = "syscalls:*", 798945aea22SJiri Olsa .check = test__checkevent_tracepoint_multi, 799945aea22SJiri Olsa }, 800945aea22SJiri Olsa [2] = { 801945aea22SJiri Olsa .name = "r1a", 802945aea22SJiri Olsa .check = test__checkevent_raw, 803945aea22SJiri Olsa }, 804945aea22SJiri Olsa [3] = { 805945aea22SJiri Olsa .name = "1:1", 806945aea22SJiri Olsa .check = test__checkevent_numeric, 807945aea22SJiri Olsa }, 808945aea22SJiri Olsa [4] = { 809945aea22SJiri Olsa .name = "instructions", 810945aea22SJiri Olsa .check = test__checkevent_symbolic_name, 811945aea22SJiri Olsa }, 812945aea22SJiri Olsa [5] = { 813945aea22SJiri Olsa .name = "cycles/period=100000,config2/", 814945aea22SJiri Olsa .check = test__checkevent_symbolic_name_config, 815945aea22SJiri Olsa }, 816945aea22SJiri Olsa [6] = { 817945aea22SJiri Olsa .name = "faults", 818945aea22SJiri Olsa .check = test__checkevent_symbolic_alias, 819945aea22SJiri Olsa }, 820945aea22SJiri Olsa [7] = { 821945aea22SJiri Olsa .name = "L1-dcache-load-miss", 822945aea22SJiri Olsa .check = test__checkevent_genhw, 823945aea22SJiri Olsa }, 824945aea22SJiri Olsa [8] = { 825945aea22SJiri Olsa .name = "mem:0", 826945aea22SJiri Olsa .check = test__checkevent_breakpoint, 827945aea22SJiri Olsa }, 828945aea22SJiri Olsa [9] = { 829945aea22SJiri Olsa .name = "mem:0:x", 830945aea22SJiri Olsa .check = test__checkevent_breakpoint_x, 831945aea22SJiri Olsa }, 832945aea22SJiri Olsa [10] = { 833945aea22SJiri Olsa .name = "mem:0:r", 834945aea22SJiri Olsa .check = test__checkevent_breakpoint_r, 835945aea22SJiri Olsa }, 836945aea22SJiri Olsa [11] = { 837945aea22SJiri Olsa .name = "mem:0:w", 838945aea22SJiri Olsa .check = test__checkevent_breakpoint_w, 839945aea22SJiri Olsa }, 840945aea22SJiri Olsa [12] = { 841945aea22SJiri Olsa .name = "syscalls:sys_enter_open:k", 842945aea22SJiri Olsa .check = test__checkevent_tracepoint_modifier, 843945aea22SJiri Olsa }, 844945aea22SJiri Olsa [13] = { 845945aea22SJiri Olsa .name = "syscalls:*:u", 846945aea22SJiri Olsa .check = test__checkevent_tracepoint_multi_modifier, 847945aea22SJiri Olsa }, 848945aea22SJiri Olsa [14] = { 849945aea22SJiri Olsa .name = "r1a:kp", 850945aea22SJiri Olsa .check = test__checkevent_raw_modifier, 851945aea22SJiri Olsa }, 852945aea22SJiri Olsa [15] = { 853945aea22SJiri Olsa .name = "1:1:hp", 854945aea22SJiri Olsa .check = test__checkevent_numeric_modifier, 855945aea22SJiri Olsa }, 856945aea22SJiri Olsa [16] = { 857945aea22SJiri Olsa .name = "instructions:h", 858945aea22SJiri Olsa .check = test__checkevent_symbolic_name_modifier, 859945aea22SJiri Olsa }, 860945aea22SJiri Olsa [17] = { 861945aea22SJiri Olsa .name = "faults:u", 862945aea22SJiri Olsa .check = test__checkevent_symbolic_alias_modifier, 863945aea22SJiri Olsa }, 864945aea22SJiri Olsa [18] = { 865945aea22SJiri Olsa .name = "L1-dcache-load-miss:kp", 866945aea22SJiri Olsa .check = test__checkevent_genhw_modifier, 867945aea22SJiri Olsa }, 868945aea22SJiri Olsa [19] = { 869945aea22SJiri Olsa .name = "mem:0:u", 870945aea22SJiri Olsa .check = test__checkevent_breakpoint_modifier, 871945aea22SJiri Olsa }, 872945aea22SJiri Olsa [20] = { 873945aea22SJiri Olsa .name = "mem:0:x:k", 874945aea22SJiri Olsa .check = test__checkevent_breakpoint_x_modifier, 875945aea22SJiri Olsa }, 876945aea22SJiri Olsa [21] = { 877945aea22SJiri Olsa .name = "mem:0:r:hp", 878945aea22SJiri Olsa .check = test__checkevent_breakpoint_r_modifier, 879945aea22SJiri Olsa }, 880945aea22SJiri Olsa [22] = { 881945aea22SJiri Olsa .name = "mem:0:w:up", 882945aea22SJiri Olsa .check = test__checkevent_breakpoint_w_modifier, 883945aea22SJiri Olsa }, 884945aea22SJiri Olsa [23] = { 885945aea22SJiri Olsa .name = "r1,syscalls:sys_enter_open:k,1:1:hp", 886945aea22SJiri Olsa .check = test__checkevent_list, 887945aea22SJiri Olsa }, 888945aea22SJiri Olsa [24] = { 889945aea22SJiri Olsa .name = "instructions:G", 890945aea22SJiri Olsa .check = test__checkevent_exclude_host_modifier, 891945aea22SJiri Olsa }, 892945aea22SJiri Olsa [25] = { 893945aea22SJiri Olsa .name = "instructions:H", 894945aea22SJiri Olsa .check = test__checkevent_exclude_guest_modifier, 895945aea22SJiri Olsa }, 896945aea22SJiri Olsa [26] = { 897945aea22SJiri Olsa .name = "mem:0:rw", 898945aea22SJiri Olsa .check = test__checkevent_breakpoint_rw, 899945aea22SJiri Olsa }, 900945aea22SJiri Olsa [27] = { 901945aea22SJiri Olsa .name = "mem:0:rw:kp", 902945aea22SJiri Olsa .check = test__checkevent_breakpoint_rw_modifier, 903945aea22SJiri Olsa }, 904945aea22SJiri Olsa [28] = { 905945aea22SJiri Olsa .name = "{instructions:k,cycles:upp}", 906945aea22SJiri Olsa .check = test__group1, 907945aea22SJiri Olsa }, 908945aea22SJiri Olsa [29] = { 909945aea22SJiri Olsa .name = "{faults:k,cache-references}:u,cycles:k", 910945aea22SJiri Olsa .check = test__group2, 911945aea22SJiri Olsa }, 912945aea22SJiri Olsa [30] = { 913945aea22SJiri Olsa .name = "group1{syscalls:sys_enter_open:H,cycles:kppp},group2{cycles,1:3}:G,instructions:u", 914945aea22SJiri Olsa .check = test__group3, 915945aea22SJiri Olsa }, 916945aea22SJiri Olsa [31] = { 917945aea22SJiri Olsa .name = "{cycles:u,instructions:kp}:p", 918945aea22SJiri Olsa .check = test__group4, 919945aea22SJiri Olsa }, 920945aea22SJiri Olsa [32] = { 921945aea22SJiri Olsa .name = "{cycles,instructions}:G,{cycles:G,instructions:G},cycles", 922945aea22SJiri Olsa .check = test__group5, 923945aea22SJiri Olsa }, 924945aea22SJiri Olsa }; 925945aea22SJiri Olsa 926945aea22SJiri Olsa static struct test__event_st test__events_pmu[] = { 927945aea22SJiri Olsa [0] = { 928945aea22SJiri Olsa .name = "cpu/config=10,config1,config2=3,period=1000/u", 929945aea22SJiri Olsa .check = test__checkevent_pmu, 930945aea22SJiri Olsa }, 931945aea22SJiri Olsa [1] = { 932945aea22SJiri Olsa .name = "cpu/config=1,name=krava/u,cpu/config=2/u", 933945aea22SJiri Olsa .check = test__checkevent_pmu_name, 934945aea22SJiri Olsa }, 935945aea22SJiri Olsa }; 936945aea22SJiri Olsa 937945aea22SJiri Olsa struct test__term { 938945aea22SJiri Olsa const char *str; 939945aea22SJiri Olsa __u32 type; 940945aea22SJiri Olsa int (*check)(struct list_head *terms); 941945aea22SJiri Olsa }; 942945aea22SJiri Olsa 943945aea22SJiri Olsa static struct test__term test__terms[] = { 944945aea22SJiri Olsa [0] = { 945945aea22SJiri Olsa .str = "config=10,config1,config2=3,umask=1", 946945aea22SJiri Olsa .check = test__checkterms_simple, 947945aea22SJiri Olsa }, 948945aea22SJiri Olsa }; 949945aea22SJiri Olsa 950945aea22SJiri Olsa static int test_event(struct test__event_st *e) 951945aea22SJiri Olsa { 952945aea22SJiri Olsa struct perf_evlist *evlist; 953945aea22SJiri Olsa int ret; 954945aea22SJiri Olsa 955945aea22SJiri Olsa evlist = perf_evlist__new(NULL, NULL); 956945aea22SJiri Olsa if (evlist == NULL) 957945aea22SJiri Olsa return -ENOMEM; 958945aea22SJiri Olsa 959945aea22SJiri Olsa ret = parse_events(evlist, e->name, 0); 960945aea22SJiri Olsa if (ret) { 961945aea22SJiri Olsa pr_debug("failed to parse event '%s', err %d\n", 962945aea22SJiri Olsa e->name, ret); 963945aea22SJiri Olsa return ret; 964945aea22SJiri Olsa } 965945aea22SJiri Olsa 966945aea22SJiri Olsa ret = e->check(evlist); 967945aea22SJiri Olsa perf_evlist__delete(evlist); 968945aea22SJiri Olsa 969945aea22SJiri Olsa return ret; 970945aea22SJiri Olsa } 971945aea22SJiri Olsa 972945aea22SJiri Olsa static int test_events(struct test__event_st *events, unsigned cnt) 973945aea22SJiri Olsa { 974945aea22SJiri Olsa int ret1, ret2 = 0; 975945aea22SJiri Olsa unsigned i; 976945aea22SJiri Olsa 977945aea22SJiri Olsa for (i = 0; i < cnt; i++) { 978945aea22SJiri Olsa struct test__event_st *e = &events[i]; 979945aea22SJiri Olsa 980945aea22SJiri Olsa pr_debug("running test %d '%s'\n", i, e->name); 981945aea22SJiri Olsa ret1 = test_event(e); 982945aea22SJiri Olsa if (ret1) 983945aea22SJiri Olsa ret2 = ret1; 984945aea22SJiri Olsa } 985945aea22SJiri Olsa 986945aea22SJiri Olsa return ret2; 987945aea22SJiri Olsa } 988945aea22SJiri Olsa 989945aea22SJiri Olsa static int test_term(struct test__term *t) 990945aea22SJiri Olsa { 991945aea22SJiri Olsa struct list_head *terms; 992945aea22SJiri Olsa int ret; 993945aea22SJiri Olsa 994945aea22SJiri Olsa terms = malloc(sizeof(*terms)); 995945aea22SJiri Olsa if (!terms) 996945aea22SJiri Olsa return -ENOMEM; 997945aea22SJiri Olsa 998945aea22SJiri Olsa INIT_LIST_HEAD(terms); 999945aea22SJiri Olsa 1000945aea22SJiri Olsa ret = parse_events_terms(terms, t->str); 1001945aea22SJiri Olsa if (ret) { 1002945aea22SJiri Olsa pr_debug("failed to parse terms '%s', err %d\n", 1003945aea22SJiri Olsa t->str , ret); 1004945aea22SJiri Olsa return ret; 1005945aea22SJiri Olsa } 1006945aea22SJiri Olsa 1007945aea22SJiri Olsa ret = t->check(terms); 1008945aea22SJiri Olsa parse_events__free_terms(terms); 1009945aea22SJiri Olsa 1010945aea22SJiri Olsa return ret; 1011945aea22SJiri Olsa } 1012945aea22SJiri Olsa 1013945aea22SJiri Olsa static int test_terms(struct test__term *terms, unsigned cnt) 1014945aea22SJiri Olsa { 1015945aea22SJiri Olsa int ret = 0; 1016945aea22SJiri Olsa unsigned i; 1017945aea22SJiri Olsa 1018945aea22SJiri Olsa for (i = 0; i < cnt; i++) { 1019945aea22SJiri Olsa struct test__term *t = &terms[i]; 1020945aea22SJiri Olsa 1021945aea22SJiri Olsa pr_debug("running test %d '%s'\n", i, t->str); 1022945aea22SJiri Olsa ret = test_term(t); 1023945aea22SJiri Olsa if (ret) 1024945aea22SJiri Olsa break; 1025945aea22SJiri Olsa } 1026945aea22SJiri Olsa 1027945aea22SJiri Olsa return ret; 1028945aea22SJiri Olsa } 1029945aea22SJiri Olsa 1030945aea22SJiri Olsa static int test_pmu(void) 1031945aea22SJiri Olsa { 1032945aea22SJiri Olsa struct stat st; 1033945aea22SJiri Olsa char path[PATH_MAX]; 1034945aea22SJiri Olsa int ret; 1035945aea22SJiri Olsa 1036945aea22SJiri Olsa snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/format/", 1037945aea22SJiri Olsa sysfs_find_mountpoint()); 1038945aea22SJiri Olsa 1039945aea22SJiri Olsa ret = stat(path, &st); 1040945aea22SJiri Olsa if (ret) 1041945aea22SJiri Olsa pr_debug("omitting PMU cpu tests\n"); 1042945aea22SJiri Olsa return !ret; 1043945aea22SJiri Olsa } 1044945aea22SJiri Olsa 1045945aea22SJiri Olsa static int test_pmu_events(void) 1046945aea22SJiri Olsa { 1047945aea22SJiri Olsa struct stat st; 1048945aea22SJiri Olsa char path[PATH_MAX]; 1049945aea22SJiri Olsa struct dirent *ent; 1050945aea22SJiri Olsa DIR *dir; 1051945aea22SJiri Olsa int ret; 1052945aea22SJiri Olsa 1053945aea22SJiri Olsa snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/events/", 1054945aea22SJiri Olsa sysfs_find_mountpoint()); 1055945aea22SJiri Olsa 1056945aea22SJiri Olsa ret = stat(path, &st); 1057945aea22SJiri Olsa if (ret) { 1058945aea22SJiri Olsa pr_debug("ommiting PMU cpu events tests\n"); 1059945aea22SJiri Olsa return 0; 1060945aea22SJiri Olsa } 1061945aea22SJiri Olsa 1062945aea22SJiri Olsa dir = opendir(path); 1063945aea22SJiri Olsa if (!dir) { 1064945aea22SJiri Olsa pr_debug("can't open pmu event dir"); 1065945aea22SJiri Olsa return -1; 1066945aea22SJiri Olsa } 1067945aea22SJiri Olsa 1068945aea22SJiri Olsa while (!ret && (ent = readdir(dir))) { 1069945aea22SJiri Olsa #define MAX_NAME 100 1070945aea22SJiri Olsa struct test__event_st e; 1071945aea22SJiri Olsa char name[MAX_NAME]; 1072945aea22SJiri Olsa 1073945aea22SJiri Olsa if (!strcmp(ent->d_name, ".") || 1074945aea22SJiri Olsa !strcmp(ent->d_name, "..")) 1075945aea22SJiri Olsa continue; 1076945aea22SJiri Olsa 1077945aea22SJiri Olsa snprintf(name, MAX_NAME, "cpu/event=%s/u", ent->d_name); 1078945aea22SJiri Olsa 1079945aea22SJiri Olsa e.name = name; 1080945aea22SJiri Olsa e.check = test__checkevent_pmu_events; 1081945aea22SJiri Olsa 1082945aea22SJiri Olsa ret = test_event(&e); 1083945aea22SJiri Olsa #undef MAX_NAME 1084945aea22SJiri Olsa } 1085945aea22SJiri Olsa 1086945aea22SJiri Olsa closedir(dir); 1087945aea22SJiri Olsa return ret; 1088945aea22SJiri Olsa } 1089945aea22SJiri Olsa 1090*c81251e8SJiri Olsa int test__parse_events(void) 1091945aea22SJiri Olsa { 1092945aea22SJiri Olsa int ret1, ret2 = 0; 1093945aea22SJiri Olsa 1094945aea22SJiri Olsa #define TEST_EVENTS(tests) \ 1095945aea22SJiri Olsa do { \ 1096945aea22SJiri Olsa ret1 = test_events(tests, ARRAY_SIZE(tests)); \ 1097945aea22SJiri Olsa if (!ret2) \ 1098945aea22SJiri Olsa ret2 = ret1; \ 1099945aea22SJiri Olsa } while (0) 1100945aea22SJiri Olsa 1101945aea22SJiri Olsa TEST_EVENTS(test__events); 1102945aea22SJiri Olsa 1103945aea22SJiri Olsa if (test_pmu()) 1104945aea22SJiri Olsa TEST_EVENTS(test__events_pmu); 1105945aea22SJiri Olsa 1106945aea22SJiri Olsa if (test_pmu()) { 1107945aea22SJiri Olsa int ret = test_pmu_events(); 1108945aea22SJiri Olsa if (ret) 1109945aea22SJiri Olsa return ret; 1110945aea22SJiri Olsa } 1111945aea22SJiri Olsa 1112945aea22SJiri Olsa ret1 = test_terms(test__terms, ARRAY_SIZE(test__terms)); 1113945aea22SJiri Olsa if (!ret2) 1114945aea22SJiri Olsa ret2 = ret1; 1115945aea22SJiri Olsa 1116945aea22SJiri Olsa return ret2; 1117945aea22SJiri Olsa } 1118