1*945aea22SJiri Olsa 2*945aea22SJiri Olsa #include "parse-events.h" 3*945aea22SJiri Olsa #include "evsel.h" 4*945aea22SJiri Olsa #include "evlist.h" 5*945aea22SJiri Olsa #include "sysfs.h" 6*945aea22SJiri Olsa #include "../../../include/linux/hw_breakpoint.h" 7*945aea22SJiri Olsa 8*945aea22SJiri Olsa #define TEST_ASSERT_VAL(text, cond) \ 9*945aea22SJiri Olsa do { \ 10*945aea22SJiri Olsa if (!(cond)) { \ 11*945aea22SJiri Olsa pr_debug("FAILED %s:%d %s\n", __FILE__, __LINE__, text); \ 12*945aea22SJiri Olsa return -1; \ 13*945aea22SJiri Olsa } \ 14*945aea22SJiri Olsa } while (0) 15*945aea22SJiri Olsa 16*945aea22SJiri Olsa #define PERF_TP_SAMPLE_TYPE (PERF_SAMPLE_RAW | PERF_SAMPLE_TIME | \ 17*945aea22SJiri Olsa PERF_SAMPLE_CPU | PERF_SAMPLE_PERIOD) 18*945aea22SJiri Olsa 19*945aea22SJiri Olsa static int test__checkevent_tracepoint(struct perf_evlist *evlist) 20*945aea22SJiri Olsa { 21*945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 22*945aea22SJiri Olsa 23*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 24*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->attr.type); 25*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 26*945aea22SJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->attr.sample_type); 27*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->attr.sample_period); 28*945aea22SJiri Olsa return 0; 29*945aea22SJiri Olsa } 30*945aea22SJiri Olsa 31*945aea22SJiri Olsa static int test__checkevent_tracepoint_multi(struct perf_evlist *evlist) 32*945aea22SJiri Olsa { 33*945aea22SJiri Olsa struct perf_evsel *evsel; 34*945aea22SJiri Olsa 35*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", evlist->nr_entries > 1); 36*945aea22SJiri Olsa 37*945aea22SJiri Olsa list_for_each_entry(evsel, &evlist->entries, node) { 38*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 39*945aea22SJiri Olsa PERF_TYPE_TRACEPOINT == evsel->attr.type); 40*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 41*945aea22SJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->attr.sample_type); 42*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 43*945aea22SJiri Olsa 1 == evsel->attr.sample_period); 44*945aea22SJiri Olsa } 45*945aea22SJiri Olsa return 0; 46*945aea22SJiri Olsa } 47*945aea22SJiri Olsa 48*945aea22SJiri Olsa static int test__checkevent_raw(struct perf_evlist *evlist) 49*945aea22SJiri Olsa { 50*945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 51*945aea22SJiri Olsa 52*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 53*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); 54*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 0x1a == evsel->attr.config); 55*945aea22SJiri Olsa return 0; 56*945aea22SJiri Olsa } 57*945aea22SJiri Olsa 58*945aea22SJiri Olsa static int test__checkevent_numeric(struct perf_evlist *evlist) 59*945aea22SJiri Olsa { 60*945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 61*945aea22SJiri Olsa 62*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 63*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->attr.type); 64*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config); 65*945aea22SJiri Olsa return 0; 66*945aea22SJiri Olsa } 67*945aea22SJiri Olsa 68*945aea22SJiri Olsa static int test__checkevent_symbolic_name(struct perf_evlist *evlist) 69*945aea22SJiri Olsa { 70*945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 71*945aea22SJiri Olsa 72*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 73*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 74*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 75*945aea22SJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); 76*945aea22SJiri Olsa return 0; 77*945aea22SJiri Olsa } 78*945aea22SJiri Olsa 79*945aea22SJiri Olsa static int test__checkevent_symbolic_name_config(struct perf_evlist *evlist) 80*945aea22SJiri Olsa { 81*945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 82*945aea22SJiri Olsa 83*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 84*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 85*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 86*945aea22SJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 87*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong period", 88*945aea22SJiri Olsa 100000 == evsel->attr.sample_period); 89*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config1", 90*945aea22SJiri Olsa 0 == evsel->attr.config1); 91*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config2", 92*945aea22SJiri Olsa 1 == evsel->attr.config2); 93*945aea22SJiri Olsa return 0; 94*945aea22SJiri Olsa } 95*945aea22SJiri Olsa 96*945aea22SJiri Olsa static int test__checkevent_symbolic_alias(struct perf_evlist *evlist) 97*945aea22SJiri Olsa { 98*945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 99*945aea22SJiri Olsa 100*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 101*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->attr.type); 102*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 103*945aea22SJiri Olsa PERF_COUNT_SW_PAGE_FAULTS == evsel->attr.config); 104*945aea22SJiri Olsa return 0; 105*945aea22SJiri Olsa } 106*945aea22SJiri Olsa 107*945aea22SJiri Olsa static int test__checkevent_genhw(struct perf_evlist *evlist) 108*945aea22SJiri Olsa { 109*945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 110*945aea22SJiri Olsa 111*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 112*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HW_CACHE == evsel->attr.type); 113*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", (1 << 16) == evsel->attr.config); 114*945aea22SJiri Olsa return 0; 115*945aea22SJiri Olsa } 116*945aea22SJiri Olsa 117*945aea22SJiri Olsa static int test__checkevent_breakpoint(struct perf_evlist *evlist) 118*945aea22SJiri Olsa { 119*945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 120*945aea22SJiri Olsa 121*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 122*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->attr.type); 123*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config); 124*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) == 125*945aea22SJiri Olsa evsel->attr.bp_type); 126*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_4 == 127*945aea22SJiri Olsa evsel->attr.bp_len); 128*945aea22SJiri Olsa return 0; 129*945aea22SJiri Olsa } 130*945aea22SJiri Olsa 131*945aea22SJiri Olsa static int test__checkevent_breakpoint_x(struct perf_evlist *evlist) 132*945aea22SJiri Olsa { 133*945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 134*945aea22SJiri Olsa 135*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 136*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->attr.type); 137*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config); 138*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 139*945aea22SJiri Olsa HW_BREAKPOINT_X == evsel->attr.bp_type); 140*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", sizeof(long) == evsel->attr.bp_len); 141*945aea22SJiri Olsa return 0; 142*945aea22SJiri Olsa } 143*945aea22SJiri Olsa 144*945aea22SJiri Olsa static int test__checkevent_breakpoint_r(struct perf_evlist *evlist) 145*945aea22SJiri Olsa { 146*945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 147*945aea22SJiri Olsa 148*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 149*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 150*945aea22SJiri Olsa PERF_TYPE_BREAKPOINT == evsel->attr.type); 151*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config); 152*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 153*945aea22SJiri Olsa HW_BREAKPOINT_R == evsel->attr.bp_type); 154*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", 155*945aea22SJiri Olsa HW_BREAKPOINT_LEN_4 == evsel->attr.bp_len); 156*945aea22SJiri Olsa return 0; 157*945aea22SJiri Olsa } 158*945aea22SJiri Olsa 159*945aea22SJiri Olsa static int test__checkevent_breakpoint_w(struct perf_evlist *evlist) 160*945aea22SJiri Olsa { 161*945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 162*945aea22SJiri Olsa 163*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 164*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 165*945aea22SJiri Olsa PERF_TYPE_BREAKPOINT == evsel->attr.type); 166*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config); 167*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 168*945aea22SJiri Olsa HW_BREAKPOINT_W == evsel->attr.bp_type); 169*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", 170*945aea22SJiri Olsa HW_BREAKPOINT_LEN_4 == evsel->attr.bp_len); 171*945aea22SJiri Olsa return 0; 172*945aea22SJiri Olsa } 173*945aea22SJiri Olsa 174*945aea22SJiri Olsa static int test__checkevent_breakpoint_rw(struct perf_evlist *evlist) 175*945aea22SJiri Olsa { 176*945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 177*945aea22SJiri Olsa 178*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 179*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 180*945aea22SJiri Olsa PERF_TYPE_BREAKPOINT == evsel->attr.type); 181*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config); 182*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 183*945aea22SJiri Olsa (HW_BREAKPOINT_R|HW_BREAKPOINT_W) == evsel->attr.bp_type); 184*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", 185*945aea22SJiri Olsa HW_BREAKPOINT_LEN_4 == evsel->attr.bp_len); 186*945aea22SJiri Olsa return 0; 187*945aea22SJiri Olsa } 188*945aea22SJiri Olsa 189*945aea22SJiri Olsa static int test__checkevent_tracepoint_modifier(struct perf_evlist *evlist) 190*945aea22SJiri Olsa { 191*945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 192*945aea22SJiri Olsa 193*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 194*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 195*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 196*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 197*945aea22SJiri Olsa 198*945aea22SJiri Olsa return test__checkevent_tracepoint(evlist); 199*945aea22SJiri Olsa } 200*945aea22SJiri Olsa 201*945aea22SJiri Olsa static int 202*945aea22SJiri Olsa test__checkevent_tracepoint_multi_modifier(struct perf_evlist *evlist) 203*945aea22SJiri Olsa { 204*945aea22SJiri Olsa struct perf_evsel *evsel; 205*945aea22SJiri Olsa 206*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", evlist->nr_entries > 1); 207*945aea22SJiri Olsa 208*945aea22SJiri Olsa list_for_each_entry(evsel, &evlist->entries, node) { 209*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", 210*945aea22SJiri Olsa !evsel->attr.exclude_user); 211*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", 212*945aea22SJiri Olsa evsel->attr.exclude_kernel); 213*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 214*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 215*945aea22SJiri Olsa } 216*945aea22SJiri Olsa 217*945aea22SJiri Olsa return test__checkevent_tracepoint_multi(evlist); 218*945aea22SJiri Olsa } 219*945aea22SJiri Olsa 220*945aea22SJiri Olsa static int test__checkevent_raw_modifier(struct perf_evlist *evlist) 221*945aea22SJiri Olsa { 222*945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 223*945aea22SJiri Olsa 224*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 225*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 226*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 227*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 228*945aea22SJiri Olsa 229*945aea22SJiri Olsa return test__checkevent_raw(evlist); 230*945aea22SJiri Olsa } 231*945aea22SJiri Olsa 232*945aea22SJiri Olsa static int test__checkevent_numeric_modifier(struct perf_evlist *evlist) 233*945aea22SJiri Olsa { 234*945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 235*945aea22SJiri Olsa 236*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 237*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 238*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 239*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 240*945aea22SJiri Olsa 241*945aea22SJiri Olsa return test__checkevent_numeric(evlist); 242*945aea22SJiri Olsa } 243*945aea22SJiri Olsa 244*945aea22SJiri Olsa static int test__checkevent_symbolic_name_modifier(struct perf_evlist *evlist) 245*945aea22SJiri Olsa { 246*945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 247*945aea22SJiri Olsa 248*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 249*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 250*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 251*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 252*945aea22SJiri Olsa 253*945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 254*945aea22SJiri Olsa } 255*945aea22SJiri Olsa 256*945aea22SJiri Olsa static int test__checkevent_exclude_host_modifier(struct perf_evlist *evlist) 257*945aea22SJiri Olsa { 258*945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 259*945aea22SJiri Olsa 260*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 261*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 262*945aea22SJiri Olsa 263*945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 264*945aea22SJiri Olsa } 265*945aea22SJiri Olsa 266*945aea22SJiri Olsa static int test__checkevent_exclude_guest_modifier(struct perf_evlist *evlist) 267*945aea22SJiri Olsa { 268*945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 269*945aea22SJiri Olsa 270*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 271*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 272*945aea22SJiri Olsa 273*945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 274*945aea22SJiri Olsa } 275*945aea22SJiri Olsa 276*945aea22SJiri Olsa static int test__checkevent_symbolic_alias_modifier(struct perf_evlist *evlist) 277*945aea22SJiri Olsa { 278*945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 279*945aea22SJiri Olsa 280*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 281*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 282*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 283*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 284*945aea22SJiri Olsa 285*945aea22SJiri Olsa return test__checkevent_symbolic_alias(evlist); 286*945aea22SJiri Olsa } 287*945aea22SJiri Olsa 288*945aea22SJiri Olsa static int test__checkevent_genhw_modifier(struct perf_evlist *evlist) 289*945aea22SJiri Olsa { 290*945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 291*945aea22SJiri Olsa 292*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 293*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 294*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 295*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 296*945aea22SJiri Olsa 297*945aea22SJiri Olsa return test__checkevent_genhw(evlist); 298*945aea22SJiri Olsa } 299*945aea22SJiri Olsa 300*945aea22SJiri Olsa static int test__checkevent_breakpoint_modifier(struct perf_evlist *evlist) 301*945aea22SJiri Olsa { 302*945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 303*945aea22SJiri Olsa 304*945aea22SJiri Olsa 305*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 306*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 307*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 308*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 309*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 310*945aea22SJiri Olsa !strcmp(perf_evsel__name(evsel), "mem:0:u")); 311*945aea22SJiri Olsa 312*945aea22SJiri Olsa return test__checkevent_breakpoint(evlist); 313*945aea22SJiri Olsa } 314*945aea22SJiri Olsa 315*945aea22SJiri Olsa static int test__checkevent_breakpoint_x_modifier(struct perf_evlist *evlist) 316*945aea22SJiri Olsa { 317*945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 318*945aea22SJiri Olsa 319*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 320*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 321*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 322*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 323*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 324*945aea22SJiri Olsa !strcmp(perf_evsel__name(evsel), "mem:0:x:k")); 325*945aea22SJiri Olsa 326*945aea22SJiri Olsa return test__checkevent_breakpoint_x(evlist); 327*945aea22SJiri Olsa } 328*945aea22SJiri Olsa 329*945aea22SJiri Olsa static int test__checkevent_breakpoint_r_modifier(struct perf_evlist *evlist) 330*945aea22SJiri Olsa { 331*945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 332*945aea22SJiri Olsa 333*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 334*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 335*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 336*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 337*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 338*945aea22SJiri Olsa !strcmp(perf_evsel__name(evsel), "mem:0:r:hp")); 339*945aea22SJiri Olsa 340*945aea22SJiri Olsa return test__checkevent_breakpoint_r(evlist); 341*945aea22SJiri Olsa } 342*945aea22SJiri Olsa 343*945aea22SJiri Olsa static int test__checkevent_breakpoint_w_modifier(struct perf_evlist *evlist) 344*945aea22SJiri Olsa { 345*945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 346*945aea22SJiri Olsa 347*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 348*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 349*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 350*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 351*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 352*945aea22SJiri Olsa !strcmp(perf_evsel__name(evsel), "mem:0:w:up")); 353*945aea22SJiri Olsa 354*945aea22SJiri Olsa return test__checkevent_breakpoint_w(evlist); 355*945aea22SJiri Olsa } 356*945aea22SJiri Olsa 357*945aea22SJiri Olsa static int test__checkevent_breakpoint_rw_modifier(struct perf_evlist *evlist) 358*945aea22SJiri Olsa { 359*945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 360*945aea22SJiri Olsa 361*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 362*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 363*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 364*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 365*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 366*945aea22SJiri Olsa !strcmp(perf_evsel__name(evsel), "mem:0:rw:kp")); 367*945aea22SJiri Olsa 368*945aea22SJiri Olsa return test__checkevent_breakpoint_rw(evlist); 369*945aea22SJiri Olsa } 370*945aea22SJiri Olsa 371*945aea22SJiri Olsa static int test__checkevent_pmu(struct perf_evlist *evlist) 372*945aea22SJiri Olsa { 373*945aea22SJiri Olsa 374*945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 375*945aea22SJiri Olsa 376*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 377*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); 378*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 10 == evsel->attr.config); 379*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config1", 1 == evsel->attr.config1); 380*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config2", 3 == evsel->attr.config2); 381*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong period", 1000 == evsel->attr.sample_period); 382*945aea22SJiri Olsa 383*945aea22SJiri Olsa return 0; 384*945aea22SJiri Olsa } 385*945aea22SJiri Olsa 386*945aea22SJiri Olsa static int test__checkevent_list(struct perf_evlist *evlist) 387*945aea22SJiri Olsa { 388*945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 389*945aea22SJiri Olsa 390*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->nr_entries); 391*945aea22SJiri Olsa 392*945aea22SJiri Olsa /* r1 */ 393*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); 394*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config); 395*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config1", 0 == evsel->attr.config1); 396*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config2", 0 == evsel->attr.config2); 397*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 398*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 399*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 400*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 401*945aea22SJiri Olsa 402*945aea22SJiri Olsa /* syscalls:sys_enter_open:k */ 403*945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 404*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->attr.type); 405*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 406*945aea22SJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->attr.sample_type); 407*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->attr.sample_period); 408*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 409*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 410*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 411*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 412*945aea22SJiri Olsa 413*945aea22SJiri Olsa /* 1:1:hp */ 414*945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 415*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->attr.type); 416*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config); 417*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 418*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 419*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 420*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 421*945aea22SJiri Olsa 422*945aea22SJiri Olsa return 0; 423*945aea22SJiri Olsa } 424*945aea22SJiri Olsa 425*945aea22SJiri Olsa static int test__checkevent_pmu_name(struct perf_evlist *evlist) 426*945aea22SJiri Olsa { 427*945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 428*945aea22SJiri Olsa 429*945aea22SJiri Olsa /* cpu/config=1,name=krava/u */ 430*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); 431*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); 432*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config); 433*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", !strcmp(perf_evsel__name(evsel), "krava")); 434*945aea22SJiri Olsa 435*945aea22SJiri Olsa /* cpu/config=2/u" */ 436*945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 437*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); 438*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); 439*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 2 == evsel->attr.config); 440*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 441*945aea22SJiri Olsa !strcmp(perf_evsel__name(evsel), "cpu/config=2/u")); 442*945aea22SJiri Olsa 443*945aea22SJiri Olsa return 0; 444*945aea22SJiri Olsa } 445*945aea22SJiri Olsa 446*945aea22SJiri Olsa static int test__checkevent_pmu_events(struct perf_evlist *evlist) 447*945aea22SJiri Olsa { 448*945aea22SJiri Olsa struct perf_evsel *evsel; 449*945aea22SJiri Olsa 450*945aea22SJiri Olsa evsel = list_entry(evlist->entries.next, struct perf_evsel, node); 451*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 452*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); 453*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", 454*945aea22SJiri Olsa !evsel->attr.exclude_user); 455*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", 456*945aea22SJiri Olsa evsel->attr.exclude_kernel); 457*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 458*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 459*945aea22SJiri Olsa 460*945aea22SJiri Olsa return 0; 461*945aea22SJiri Olsa } 462*945aea22SJiri Olsa 463*945aea22SJiri Olsa static int test__checkterms_simple(struct list_head *terms) 464*945aea22SJiri Olsa { 465*945aea22SJiri Olsa struct parse_events__term *term; 466*945aea22SJiri Olsa 467*945aea22SJiri Olsa /* config=10 */ 468*945aea22SJiri Olsa term = list_entry(terms->next, struct parse_events__term, list); 469*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 470*945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG); 471*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 472*945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 473*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 10); 474*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", !term->config); 475*945aea22SJiri Olsa 476*945aea22SJiri Olsa /* config1 */ 477*945aea22SJiri Olsa term = list_entry(term->list.next, struct parse_events__term, list); 478*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 479*945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG1); 480*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 481*945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 482*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 1); 483*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", !term->config); 484*945aea22SJiri Olsa 485*945aea22SJiri Olsa /* config2=3 */ 486*945aea22SJiri Olsa term = list_entry(term->list.next, struct parse_events__term, list); 487*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 488*945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG2); 489*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 490*945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 491*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 3); 492*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", !term->config); 493*945aea22SJiri Olsa 494*945aea22SJiri Olsa /* umask=1*/ 495*945aea22SJiri Olsa term = list_entry(term->list.next, struct parse_events__term, list); 496*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 497*945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_USER); 498*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 499*945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 500*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 1); 501*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "umask")); 502*945aea22SJiri Olsa 503*945aea22SJiri Olsa return 0; 504*945aea22SJiri Olsa } 505*945aea22SJiri Olsa 506*945aea22SJiri Olsa static int test__group1(struct perf_evlist *evlist) 507*945aea22SJiri Olsa { 508*945aea22SJiri Olsa struct perf_evsel *evsel, *leader; 509*945aea22SJiri Olsa 510*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); 511*945aea22SJiri Olsa 512*945aea22SJiri Olsa /* instructions:k */ 513*945aea22SJiri Olsa evsel = leader = perf_evlist__first(evlist); 514*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 515*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 516*945aea22SJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); 517*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 518*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 519*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 520*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 521*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 522*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 523*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == NULL); 524*945aea22SJiri Olsa 525*945aea22SJiri Olsa /* cycles:upp */ 526*945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 527*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 528*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 529*945aea22SJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 530*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 531*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 532*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 533*945aea22SJiri Olsa /* use of precise requires exclude_guest */ 534*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 535*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 536*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 2); 537*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 538*945aea22SJiri Olsa 539*945aea22SJiri Olsa return 0; 540*945aea22SJiri Olsa } 541*945aea22SJiri Olsa 542*945aea22SJiri Olsa static int test__group2(struct perf_evlist *evlist) 543*945aea22SJiri Olsa { 544*945aea22SJiri Olsa struct perf_evsel *evsel, *leader; 545*945aea22SJiri Olsa 546*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->nr_entries); 547*945aea22SJiri Olsa 548*945aea22SJiri Olsa /* faults + :ku modifier */ 549*945aea22SJiri Olsa evsel = leader = perf_evlist__first(evlist); 550*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->attr.type); 551*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 552*945aea22SJiri Olsa PERF_COUNT_SW_PAGE_FAULTS == evsel->attr.config); 553*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 554*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 555*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 556*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 557*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 558*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 559*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == NULL); 560*945aea22SJiri Olsa 561*945aea22SJiri Olsa /* cache-references + :u modifier */ 562*945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 563*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 564*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 565*945aea22SJiri Olsa PERF_COUNT_HW_CACHE_REFERENCES == evsel->attr.config); 566*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 567*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 568*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 569*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 570*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 571*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 572*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 573*945aea22SJiri Olsa 574*945aea22SJiri Olsa /* cycles:k */ 575*945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 576*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 577*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 578*945aea22SJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 579*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 580*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 581*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 582*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 583*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 584*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 585*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == NULL); 586*945aea22SJiri Olsa 587*945aea22SJiri Olsa return 0; 588*945aea22SJiri Olsa } 589*945aea22SJiri Olsa 590*945aea22SJiri Olsa static int test__group3(struct perf_evlist *evlist __maybe_unused) 591*945aea22SJiri Olsa { 592*945aea22SJiri Olsa struct perf_evsel *evsel, *leader; 593*945aea22SJiri Olsa 594*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->nr_entries); 595*945aea22SJiri Olsa 596*945aea22SJiri Olsa /* group1 syscalls:sys_enter_open:H */ 597*945aea22SJiri Olsa evsel = leader = perf_evlist__first(evlist); 598*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->attr.type); 599*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 600*945aea22SJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->attr.sample_type); 601*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->attr.sample_period); 602*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 603*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 604*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 605*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 606*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 607*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 608*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == NULL); 609*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", 610*945aea22SJiri Olsa !strcmp(leader->group_name, "group1")); 611*945aea22SJiri Olsa 612*945aea22SJiri Olsa /* group1 cycles:kppp */ 613*945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 614*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 615*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 616*945aea22SJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 617*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 618*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 619*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 620*945aea22SJiri Olsa /* use of precise requires exclude_guest */ 621*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 622*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 623*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 3); 624*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 625*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 626*945aea22SJiri Olsa 627*945aea22SJiri Olsa /* group2 cycles + G modifier */ 628*945aea22SJiri Olsa evsel = leader = perf_evsel__next(evsel); 629*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 630*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 631*945aea22SJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 632*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 633*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 634*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 635*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 636*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 637*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 638*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == NULL); 639*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", 640*945aea22SJiri Olsa !strcmp(leader->group_name, "group2")); 641*945aea22SJiri Olsa 642*945aea22SJiri Olsa /* group2 1:3 + G modifier */ 643*945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 644*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->attr.type); 645*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 3 == evsel->attr.config); 646*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 647*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 648*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 649*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 650*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 651*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 652*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 653*945aea22SJiri Olsa 654*945aea22SJiri Olsa /* instructions:u */ 655*945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 656*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 657*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 658*945aea22SJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); 659*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 660*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 661*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 662*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 663*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 664*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 665*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == NULL); 666*945aea22SJiri Olsa 667*945aea22SJiri Olsa return 0; 668*945aea22SJiri Olsa } 669*945aea22SJiri Olsa 670*945aea22SJiri Olsa static int test__group4(struct perf_evlist *evlist __maybe_unused) 671*945aea22SJiri Olsa { 672*945aea22SJiri Olsa struct perf_evsel *evsel, *leader; 673*945aea22SJiri Olsa 674*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); 675*945aea22SJiri Olsa 676*945aea22SJiri Olsa /* cycles:u + p */ 677*945aea22SJiri Olsa evsel = leader = perf_evlist__first(evlist); 678*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 679*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 680*945aea22SJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 681*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 682*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 683*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 684*945aea22SJiri Olsa /* use of precise requires exclude_guest */ 685*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 686*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 687*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 1); 688*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 689*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == NULL); 690*945aea22SJiri Olsa 691*945aea22SJiri Olsa /* instructions:kp + p */ 692*945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 693*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 694*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 695*945aea22SJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); 696*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 697*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 698*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 699*945aea22SJiri Olsa /* use of precise requires exclude_guest */ 700*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 701*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 702*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 2); 703*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 704*945aea22SJiri Olsa 705*945aea22SJiri Olsa return 0; 706*945aea22SJiri Olsa } 707*945aea22SJiri Olsa 708*945aea22SJiri Olsa static int test__group5(struct perf_evlist *evlist __maybe_unused) 709*945aea22SJiri Olsa { 710*945aea22SJiri Olsa struct perf_evsel *evsel, *leader; 711*945aea22SJiri Olsa 712*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->nr_entries); 713*945aea22SJiri Olsa 714*945aea22SJiri Olsa /* cycles + G */ 715*945aea22SJiri Olsa evsel = leader = perf_evlist__first(evlist); 716*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 717*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 718*945aea22SJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 719*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 720*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 721*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 722*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 723*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 724*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 725*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 726*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == NULL); 727*945aea22SJiri Olsa 728*945aea22SJiri Olsa /* instructions + G */ 729*945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 730*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 731*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 732*945aea22SJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); 733*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 734*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 735*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 736*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 737*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 738*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 739*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 740*945aea22SJiri Olsa 741*945aea22SJiri Olsa /* cycles:G */ 742*945aea22SJiri Olsa evsel = leader = perf_evsel__next(evsel); 743*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 744*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 745*945aea22SJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 746*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 747*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 748*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 749*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 750*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 751*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 752*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 753*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == NULL); 754*945aea22SJiri Olsa 755*945aea22SJiri Olsa /* instructions:G */ 756*945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 757*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 758*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 759*945aea22SJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); 760*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 761*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 762*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 763*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 764*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 765*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 766*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 767*945aea22SJiri Olsa 768*945aea22SJiri Olsa /* cycles */ 769*945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 770*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 771*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 772*945aea22SJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 773*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 774*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 775*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 776*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 777*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 778*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 779*945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == NULL); 780*945aea22SJiri Olsa 781*945aea22SJiri Olsa return 0; 782*945aea22SJiri Olsa } 783*945aea22SJiri Olsa 784*945aea22SJiri Olsa struct test__event_st { 785*945aea22SJiri Olsa const char *name; 786*945aea22SJiri Olsa __u32 type; 787*945aea22SJiri Olsa int (*check)(struct perf_evlist *evlist); 788*945aea22SJiri Olsa }; 789*945aea22SJiri Olsa 790*945aea22SJiri Olsa static struct test__event_st test__events[] = { 791*945aea22SJiri Olsa [0] = { 792*945aea22SJiri Olsa .name = "syscalls:sys_enter_open", 793*945aea22SJiri Olsa .check = test__checkevent_tracepoint, 794*945aea22SJiri Olsa }, 795*945aea22SJiri Olsa [1] = { 796*945aea22SJiri Olsa .name = "syscalls:*", 797*945aea22SJiri Olsa .check = test__checkevent_tracepoint_multi, 798*945aea22SJiri Olsa }, 799*945aea22SJiri Olsa [2] = { 800*945aea22SJiri Olsa .name = "r1a", 801*945aea22SJiri Olsa .check = test__checkevent_raw, 802*945aea22SJiri Olsa }, 803*945aea22SJiri Olsa [3] = { 804*945aea22SJiri Olsa .name = "1:1", 805*945aea22SJiri Olsa .check = test__checkevent_numeric, 806*945aea22SJiri Olsa }, 807*945aea22SJiri Olsa [4] = { 808*945aea22SJiri Olsa .name = "instructions", 809*945aea22SJiri Olsa .check = test__checkevent_symbolic_name, 810*945aea22SJiri Olsa }, 811*945aea22SJiri Olsa [5] = { 812*945aea22SJiri Olsa .name = "cycles/period=100000,config2/", 813*945aea22SJiri Olsa .check = test__checkevent_symbolic_name_config, 814*945aea22SJiri Olsa }, 815*945aea22SJiri Olsa [6] = { 816*945aea22SJiri Olsa .name = "faults", 817*945aea22SJiri Olsa .check = test__checkevent_symbolic_alias, 818*945aea22SJiri Olsa }, 819*945aea22SJiri Olsa [7] = { 820*945aea22SJiri Olsa .name = "L1-dcache-load-miss", 821*945aea22SJiri Olsa .check = test__checkevent_genhw, 822*945aea22SJiri Olsa }, 823*945aea22SJiri Olsa [8] = { 824*945aea22SJiri Olsa .name = "mem:0", 825*945aea22SJiri Olsa .check = test__checkevent_breakpoint, 826*945aea22SJiri Olsa }, 827*945aea22SJiri Olsa [9] = { 828*945aea22SJiri Olsa .name = "mem:0:x", 829*945aea22SJiri Olsa .check = test__checkevent_breakpoint_x, 830*945aea22SJiri Olsa }, 831*945aea22SJiri Olsa [10] = { 832*945aea22SJiri Olsa .name = "mem:0:r", 833*945aea22SJiri Olsa .check = test__checkevent_breakpoint_r, 834*945aea22SJiri Olsa }, 835*945aea22SJiri Olsa [11] = { 836*945aea22SJiri Olsa .name = "mem:0:w", 837*945aea22SJiri Olsa .check = test__checkevent_breakpoint_w, 838*945aea22SJiri Olsa }, 839*945aea22SJiri Olsa [12] = { 840*945aea22SJiri Olsa .name = "syscalls:sys_enter_open:k", 841*945aea22SJiri Olsa .check = test__checkevent_tracepoint_modifier, 842*945aea22SJiri Olsa }, 843*945aea22SJiri Olsa [13] = { 844*945aea22SJiri Olsa .name = "syscalls:*:u", 845*945aea22SJiri Olsa .check = test__checkevent_tracepoint_multi_modifier, 846*945aea22SJiri Olsa }, 847*945aea22SJiri Olsa [14] = { 848*945aea22SJiri Olsa .name = "r1a:kp", 849*945aea22SJiri Olsa .check = test__checkevent_raw_modifier, 850*945aea22SJiri Olsa }, 851*945aea22SJiri Olsa [15] = { 852*945aea22SJiri Olsa .name = "1:1:hp", 853*945aea22SJiri Olsa .check = test__checkevent_numeric_modifier, 854*945aea22SJiri Olsa }, 855*945aea22SJiri Olsa [16] = { 856*945aea22SJiri Olsa .name = "instructions:h", 857*945aea22SJiri Olsa .check = test__checkevent_symbolic_name_modifier, 858*945aea22SJiri Olsa }, 859*945aea22SJiri Olsa [17] = { 860*945aea22SJiri Olsa .name = "faults:u", 861*945aea22SJiri Olsa .check = test__checkevent_symbolic_alias_modifier, 862*945aea22SJiri Olsa }, 863*945aea22SJiri Olsa [18] = { 864*945aea22SJiri Olsa .name = "L1-dcache-load-miss:kp", 865*945aea22SJiri Olsa .check = test__checkevent_genhw_modifier, 866*945aea22SJiri Olsa }, 867*945aea22SJiri Olsa [19] = { 868*945aea22SJiri Olsa .name = "mem:0:u", 869*945aea22SJiri Olsa .check = test__checkevent_breakpoint_modifier, 870*945aea22SJiri Olsa }, 871*945aea22SJiri Olsa [20] = { 872*945aea22SJiri Olsa .name = "mem:0:x:k", 873*945aea22SJiri Olsa .check = test__checkevent_breakpoint_x_modifier, 874*945aea22SJiri Olsa }, 875*945aea22SJiri Olsa [21] = { 876*945aea22SJiri Olsa .name = "mem:0:r:hp", 877*945aea22SJiri Olsa .check = test__checkevent_breakpoint_r_modifier, 878*945aea22SJiri Olsa }, 879*945aea22SJiri Olsa [22] = { 880*945aea22SJiri Olsa .name = "mem:0:w:up", 881*945aea22SJiri Olsa .check = test__checkevent_breakpoint_w_modifier, 882*945aea22SJiri Olsa }, 883*945aea22SJiri Olsa [23] = { 884*945aea22SJiri Olsa .name = "r1,syscalls:sys_enter_open:k,1:1:hp", 885*945aea22SJiri Olsa .check = test__checkevent_list, 886*945aea22SJiri Olsa }, 887*945aea22SJiri Olsa [24] = { 888*945aea22SJiri Olsa .name = "instructions:G", 889*945aea22SJiri Olsa .check = test__checkevent_exclude_host_modifier, 890*945aea22SJiri Olsa }, 891*945aea22SJiri Olsa [25] = { 892*945aea22SJiri Olsa .name = "instructions:H", 893*945aea22SJiri Olsa .check = test__checkevent_exclude_guest_modifier, 894*945aea22SJiri Olsa }, 895*945aea22SJiri Olsa [26] = { 896*945aea22SJiri Olsa .name = "mem:0:rw", 897*945aea22SJiri Olsa .check = test__checkevent_breakpoint_rw, 898*945aea22SJiri Olsa }, 899*945aea22SJiri Olsa [27] = { 900*945aea22SJiri Olsa .name = "mem:0:rw:kp", 901*945aea22SJiri Olsa .check = test__checkevent_breakpoint_rw_modifier, 902*945aea22SJiri Olsa }, 903*945aea22SJiri Olsa [28] = { 904*945aea22SJiri Olsa .name = "{instructions:k,cycles:upp}", 905*945aea22SJiri Olsa .check = test__group1, 906*945aea22SJiri Olsa }, 907*945aea22SJiri Olsa [29] = { 908*945aea22SJiri Olsa .name = "{faults:k,cache-references}:u,cycles:k", 909*945aea22SJiri Olsa .check = test__group2, 910*945aea22SJiri Olsa }, 911*945aea22SJiri Olsa [30] = { 912*945aea22SJiri Olsa .name = "group1{syscalls:sys_enter_open:H,cycles:kppp},group2{cycles,1:3}:G,instructions:u", 913*945aea22SJiri Olsa .check = test__group3, 914*945aea22SJiri Olsa }, 915*945aea22SJiri Olsa [31] = { 916*945aea22SJiri Olsa .name = "{cycles:u,instructions:kp}:p", 917*945aea22SJiri Olsa .check = test__group4, 918*945aea22SJiri Olsa }, 919*945aea22SJiri Olsa [32] = { 920*945aea22SJiri Olsa .name = "{cycles,instructions}:G,{cycles:G,instructions:G},cycles", 921*945aea22SJiri Olsa .check = test__group5, 922*945aea22SJiri Olsa }, 923*945aea22SJiri Olsa }; 924*945aea22SJiri Olsa 925*945aea22SJiri Olsa static struct test__event_st test__events_pmu[] = { 926*945aea22SJiri Olsa [0] = { 927*945aea22SJiri Olsa .name = "cpu/config=10,config1,config2=3,period=1000/u", 928*945aea22SJiri Olsa .check = test__checkevent_pmu, 929*945aea22SJiri Olsa }, 930*945aea22SJiri Olsa [1] = { 931*945aea22SJiri Olsa .name = "cpu/config=1,name=krava/u,cpu/config=2/u", 932*945aea22SJiri Olsa .check = test__checkevent_pmu_name, 933*945aea22SJiri Olsa }, 934*945aea22SJiri Olsa }; 935*945aea22SJiri Olsa 936*945aea22SJiri Olsa struct test__term { 937*945aea22SJiri Olsa const char *str; 938*945aea22SJiri Olsa __u32 type; 939*945aea22SJiri Olsa int (*check)(struct list_head *terms); 940*945aea22SJiri Olsa }; 941*945aea22SJiri Olsa 942*945aea22SJiri Olsa static struct test__term test__terms[] = { 943*945aea22SJiri Olsa [0] = { 944*945aea22SJiri Olsa .str = "config=10,config1,config2=3,umask=1", 945*945aea22SJiri Olsa .check = test__checkterms_simple, 946*945aea22SJiri Olsa }, 947*945aea22SJiri Olsa }; 948*945aea22SJiri Olsa 949*945aea22SJiri Olsa static int test_event(struct test__event_st *e) 950*945aea22SJiri Olsa { 951*945aea22SJiri Olsa struct perf_evlist *evlist; 952*945aea22SJiri Olsa int ret; 953*945aea22SJiri Olsa 954*945aea22SJiri Olsa evlist = perf_evlist__new(NULL, NULL); 955*945aea22SJiri Olsa if (evlist == NULL) 956*945aea22SJiri Olsa return -ENOMEM; 957*945aea22SJiri Olsa 958*945aea22SJiri Olsa ret = parse_events(evlist, e->name, 0); 959*945aea22SJiri Olsa if (ret) { 960*945aea22SJiri Olsa pr_debug("failed to parse event '%s', err %d\n", 961*945aea22SJiri Olsa e->name, ret); 962*945aea22SJiri Olsa return ret; 963*945aea22SJiri Olsa } 964*945aea22SJiri Olsa 965*945aea22SJiri Olsa ret = e->check(evlist); 966*945aea22SJiri Olsa perf_evlist__delete(evlist); 967*945aea22SJiri Olsa 968*945aea22SJiri Olsa return ret; 969*945aea22SJiri Olsa } 970*945aea22SJiri Olsa 971*945aea22SJiri Olsa static int test_events(struct test__event_st *events, unsigned cnt) 972*945aea22SJiri Olsa { 973*945aea22SJiri Olsa int ret1, ret2 = 0; 974*945aea22SJiri Olsa unsigned i; 975*945aea22SJiri Olsa 976*945aea22SJiri Olsa for (i = 0; i < cnt; i++) { 977*945aea22SJiri Olsa struct test__event_st *e = &events[i]; 978*945aea22SJiri Olsa 979*945aea22SJiri Olsa pr_debug("running test %d '%s'\n", i, e->name); 980*945aea22SJiri Olsa ret1 = test_event(e); 981*945aea22SJiri Olsa if (ret1) 982*945aea22SJiri Olsa ret2 = ret1; 983*945aea22SJiri Olsa } 984*945aea22SJiri Olsa 985*945aea22SJiri Olsa return ret2; 986*945aea22SJiri Olsa } 987*945aea22SJiri Olsa 988*945aea22SJiri Olsa static int test_term(struct test__term *t) 989*945aea22SJiri Olsa { 990*945aea22SJiri Olsa struct list_head *terms; 991*945aea22SJiri Olsa int ret; 992*945aea22SJiri Olsa 993*945aea22SJiri Olsa terms = malloc(sizeof(*terms)); 994*945aea22SJiri Olsa if (!terms) 995*945aea22SJiri Olsa return -ENOMEM; 996*945aea22SJiri Olsa 997*945aea22SJiri Olsa INIT_LIST_HEAD(terms); 998*945aea22SJiri Olsa 999*945aea22SJiri Olsa ret = parse_events_terms(terms, t->str); 1000*945aea22SJiri Olsa if (ret) { 1001*945aea22SJiri Olsa pr_debug("failed to parse terms '%s', err %d\n", 1002*945aea22SJiri Olsa t->str , ret); 1003*945aea22SJiri Olsa return ret; 1004*945aea22SJiri Olsa } 1005*945aea22SJiri Olsa 1006*945aea22SJiri Olsa ret = t->check(terms); 1007*945aea22SJiri Olsa parse_events__free_terms(terms); 1008*945aea22SJiri Olsa 1009*945aea22SJiri Olsa return ret; 1010*945aea22SJiri Olsa } 1011*945aea22SJiri Olsa 1012*945aea22SJiri Olsa static int test_terms(struct test__term *terms, unsigned cnt) 1013*945aea22SJiri Olsa { 1014*945aea22SJiri Olsa int ret = 0; 1015*945aea22SJiri Olsa unsigned i; 1016*945aea22SJiri Olsa 1017*945aea22SJiri Olsa for (i = 0; i < cnt; i++) { 1018*945aea22SJiri Olsa struct test__term *t = &terms[i]; 1019*945aea22SJiri Olsa 1020*945aea22SJiri Olsa pr_debug("running test %d '%s'\n", i, t->str); 1021*945aea22SJiri Olsa ret = test_term(t); 1022*945aea22SJiri Olsa if (ret) 1023*945aea22SJiri Olsa break; 1024*945aea22SJiri Olsa } 1025*945aea22SJiri Olsa 1026*945aea22SJiri Olsa return ret; 1027*945aea22SJiri Olsa } 1028*945aea22SJiri Olsa 1029*945aea22SJiri Olsa static int test_pmu(void) 1030*945aea22SJiri Olsa { 1031*945aea22SJiri Olsa struct stat st; 1032*945aea22SJiri Olsa char path[PATH_MAX]; 1033*945aea22SJiri Olsa int ret; 1034*945aea22SJiri Olsa 1035*945aea22SJiri Olsa snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/format/", 1036*945aea22SJiri Olsa sysfs_find_mountpoint()); 1037*945aea22SJiri Olsa 1038*945aea22SJiri Olsa ret = stat(path, &st); 1039*945aea22SJiri Olsa if (ret) 1040*945aea22SJiri Olsa pr_debug("omitting PMU cpu tests\n"); 1041*945aea22SJiri Olsa return !ret; 1042*945aea22SJiri Olsa } 1043*945aea22SJiri Olsa 1044*945aea22SJiri Olsa static int test_pmu_events(void) 1045*945aea22SJiri Olsa { 1046*945aea22SJiri Olsa struct stat st; 1047*945aea22SJiri Olsa char path[PATH_MAX]; 1048*945aea22SJiri Olsa struct dirent *ent; 1049*945aea22SJiri Olsa DIR *dir; 1050*945aea22SJiri Olsa int ret; 1051*945aea22SJiri Olsa 1052*945aea22SJiri Olsa snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/events/", 1053*945aea22SJiri Olsa sysfs_find_mountpoint()); 1054*945aea22SJiri Olsa 1055*945aea22SJiri Olsa ret = stat(path, &st); 1056*945aea22SJiri Olsa if (ret) { 1057*945aea22SJiri Olsa pr_debug("ommiting PMU cpu events tests\n"); 1058*945aea22SJiri Olsa return 0; 1059*945aea22SJiri Olsa } 1060*945aea22SJiri Olsa 1061*945aea22SJiri Olsa dir = opendir(path); 1062*945aea22SJiri Olsa if (!dir) { 1063*945aea22SJiri Olsa pr_debug("can't open pmu event dir"); 1064*945aea22SJiri Olsa return -1; 1065*945aea22SJiri Olsa } 1066*945aea22SJiri Olsa 1067*945aea22SJiri Olsa while (!ret && (ent = readdir(dir))) { 1068*945aea22SJiri Olsa #define MAX_NAME 100 1069*945aea22SJiri Olsa struct test__event_st e; 1070*945aea22SJiri Olsa char name[MAX_NAME]; 1071*945aea22SJiri Olsa 1072*945aea22SJiri Olsa if (!strcmp(ent->d_name, ".") || 1073*945aea22SJiri Olsa !strcmp(ent->d_name, "..")) 1074*945aea22SJiri Olsa continue; 1075*945aea22SJiri Olsa 1076*945aea22SJiri Olsa snprintf(name, MAX_NAME, "cpu/event=%s/u", ent->d_name); 1077*945aea22SJiri Olsa 1078*945aea22SJiri Olsa e.name = name; 1079*945aea22SJiri Olsa e.check = test__checkevent_pmu_events; 1080*945aea22SJiri Olsa 1081*945aea22SJiri Olsa ret = test_event(&e); 1082*945aea22SJiri Olsa #undef MAX_NAME 1083*945aea22SJiri Olsa } 1084*945aea22SJiri Olsa 1085*945aea22SJiri Olsa closedir(dir); 1086*945aea22SJiri Olsa return ret; 1087*945aea22SJiri Olsa } 1088*945aea22SJiri Olsa 1089*945aea22SJiri Olsa int parse_events__test(void) 1090*945aea22SJiri Olsa { 1091*945aea22SJiri Olsa int ret1, ret2 = 0; 1092*945aea22SJiri Olsa 1093*945aea22SJiri Olsa #define TEST_EVENTS(tests) \ 1094*945aea22SJiri Olsa do { \ 1095*945aea22SJiri Olsa ret1 = test_events(tests, ARRAY_SIZE(tests)); \ 1096*945aea22SJiri Olsa if (!ret2) \ 1097*945aea22SJiri Olsa ret2 = ret1; \ 1098*945aea22SJiri Olsa } while (0) 1099*945aea22SJiri Olsa 1100*945aea22SJiri Olsa TEST_EVENTS(test__events); 1101*945aea22SJiri Olsa 1102*945aea22SJiri Olsa if (test_pmu()) 1103*945aea22SJiri Olsa TEST_EVENTS(test__events_pmu); 1104*945aea22SJiri Olsa 1105*945aea22SJiri Olsa if (test_pmu()) { 1106*945aea22SJiri Olsa int ret = test_pmu_events(); 1107*945aea22SJiri Olsa if (ret) 1108*945aea22SJiri Olsa return ret; 1109*945aea22SJiri Olsa } 1110*945aea22SJiri Olsa 1111*945aea22SJiri Olsa ret1 = test_terms(test__terms, ARRAY_SIZE(test__terms)); 1112*945aea22SJiri Olsa if (!ret2) 1113*945aea22SJiri Olsa ret2 = ret1; 1114*945aea22SJiri Olsa 1115*945aea22SJiri Olsa return ret2; 1116*945aea22SJiri Olsa } 1117