1945aea22SJiri Olsa #include "parse-events.h" 2945aea22SJiri Olsa #include "evsel.h" 3945aea22SJiri Olsa #include "evlist.h" 4cd0cfad7SBorislav Petkov #include <api/fs/fs.h> 5c81251e8SJiri Olsa #include "tests.h" 684f5d36fSJiri Olsa #include "debug.h" 72690c730SNamhyung Kim #include "util.h" 8*a43783aeSArnaldo Carvalho de Melo #include <errno.h> 9877a7a11SArnaldo Carvalho de Melo #include <linux/kernel.h> 10f0b9abfbSIngo Molnar #include <linux/hw_breakpoint.h> 114605eab3SJiri Olsa #include <api/fs/fs.h> 12945aea22SJiri Olsa 13945aea22SJiri Olsa #define PERF_TP_SAMPLE_TYPE (PERF_SAMPLE_RAW | PERF_SAMPLE_TIME | \ 14945aea22SJiri Olsa PERF_SAMPLE_CPU | PERF_SAMPLE_PERIOD) 15945aea22SJiri Olsa 16945aea22SJiri Olsa static int test__checkevent_tracepoint(struct perf_evlist *evlist) 17945aea22SJiri Olsa { 18945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 19945aea22SJiri Olsa 20945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 218d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong number of groups", 0 == evlist->nr_groups); 22945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->attr.type); 23945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 24945aea22SJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->attr.sample_type); 25945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->attr.sample_period); 26945aea22SJiri Olsa return 0; 27945aea22SJiri Olsa } 28945aea22SJiri Olsa 29945aea22SJiri Olsa static int test__checkevent_tracepoint_multi(struct perf_evlist *evlist) 30945aea22SJiri Olsa { 31945aea22SJiri Olsa struct perf_evsel *evsel; 32945aea22SJiri Olsa 33945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", evlist->nr_entries > 1); 348d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong number of groups", 0 == evlist->nr_groups); 35945aea22SJiri Olsa 36e5cadb93SArnaldo Carvalho de Melo evlist__for_each_entry(evlist, evsel) { 37945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 38945aea22SJiri Olsa PERF_TYPE_TRACEPOINT == evsel->attr.type); 39945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 40945aea22SJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->attr.sample_type); 41945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 42945aea22SJiri Olsa 1 == evsel->attr.sample_period); 43945aea22SJiri Olsa } 44945aea22SJiri Olsa return 0; 45945aea22SJiri Olsa } 46945aea22SJiri Olsa 47945aea22SJiri Olsa static int test__checkevent_raw(struct perf_evlist *evlist) 48945aea22SJiri Olsa { 49945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 50945aea22SJiri Olsa 51945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 52945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); 53945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 0x1a == evsel->attr.config); 54945aea22SJiri Olsa return 0; 55945aea22SJiri Olsa } 56945aea22SJiri Olsa 57945aea22SJiri Olsa static int test__checkevent_numeric(struct perf_evlist *evlist) 58945aea22SJiri Olsa { 59945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 60945aea22SJiri Olsa 61945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 62945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->attr.type); 63945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config); 64945aea22SJiri Olsa return 0; 65945aea22SJiri Olsa } 66945aea22SJiri Olsa 67945aea22SJiri Olsa static int test__checkevent_symbolic_name(struct perf_evlist *evlist) 68945aea22SJiri Olsa { 69945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 70945aea22SJiri Olsa 71945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 72945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 73945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 74945aea22SJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); 75945aea22SJiri Olsa return 0; 76945aea22SJiri Olsa } 77945aea22SJiri Olsa 78945aea22SJiri Olsa static int test__checkevent_symbolic_name_config(struct perf_evlist *evlist) 79945aea22SJiri Olsa { 80945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 81945aea22SJiri Olsa 82945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 83945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 84945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 85945aea22SJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 86ee4c7588SJiri Olsa /* 87ee4c7588SJiri Olsa * The period value gets configured within perf_evlist__config, 88ee4c7588SJiri Olsa * while this test executes only parse events method. 89ee4c7588SJiri Olsa */ 90945aea22SJiri Olsa TEST_ASSERT_VAL("wrong period", 91ee4c7588SJiri Olsa 0 == evsel->attr.sample_period); 92945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config1", 93945aea22SJiri Olsa 0 == evsel->attr.config1); 94945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config2", 95945aea22SJiri Olsa 1 == evsel->attr.config2); 96945aea22SJiri Olsa return 0; 97945aea22SJiri Olsa } 98945aea22SJiri Olsa 99945aea22SJiri Olsa static int test__checkevent_symbolic_alias(struct perf_evlist *evlist) 100945aea22SJiri Olsa { 101945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 102945aea22SJiri Olsa 103945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 104945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->attr.type); 105945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 106945aea22SJiri Olsa PERF_COUNT_SW_PAGE_FAULTS == evsel->attr.config); 107945aea22SJiri Olsa return 0; 108945aea22SJiri Olsa } 109945aea22SJiri Olsa 110945aea22SJiri Olsa static int test__checkevent_genhw(struct perf_evlist *evlist) 111945aea22SJiri Olsa { 112945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 113945aea22SJiri Olsa 114945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 115945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HW_CACHE == evsel->attr.type); 116945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", (1 << 16) == evsel->attr.config); 117945aea22SJiri Olsa return 0; 118945aea22SJiri Olsa } 119945aea22SJiri Olsa 120945aea22SJiri Olsa static int test__checkevent_breakpoint(struct perf_evlist *evlist) 121945aea22SJiri Olsa { 122945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 123945aea22SJiri Olsa 124945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 125945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->attr.type); 126945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config); 127945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) == 128945aea22SJiri Olsa evsel->attr.bp_type); 129945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_4 == 130945aea22SJiri Olsa evsel->attr.bp_len); 131945aea22SJiri Olsa return 0; 132945aea22SJiri Olsa } 133945aea22SJiri Olsa 134945aea22SJiri Olsa static int test__checkevent_breakpoint_x(struct perf_evlist *evlist) 135945aea22SJiri Olsa { 136945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 137945aea22SJiri Olsa 138945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 139945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->attr.type); 140945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config); 141945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 142945aea22SJiri Olsa HW_BREAKPOINT_X == evsel->attr.bp_type); 143945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", sizeof(long) == evsel->attr.bp_len); 144945aea22SJiri Olsa return 0; 145945aea22SJiri Olsa } 146945aea22SJiri Olsa 147945aea22SJiri Olsa static int test__checkevent_breakpoint_r(struct perf_evlist *evlist) 148945aea22SJiri Olsa { 149945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 150945aea22SJiri Olsa 151945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 152945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 153945aea22SJiri Olsa PERF_TYPE_BREAKPOINT == evsel->attr.type); 154945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config); 155945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 156945aea22SJiri Olsa HW_BREAKPOINT_R == evsel->attr.bp_type); 157945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", 158945aea22SJiri Olsa HW_BREAKPOINT_LEN_4 == evsel->attr.bp_len); 159945aea22SJiri Olsa return 0; 160945aea22SJiri Olsa } 161945aea22SJiri Olsa 162945aea22SJiri Olsa static int test__checkevent_breakpoint_w(struct perf_evlist *evlist) 163945aea22SJiri Olsa { 164945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 165945aea22SJiri Olsa 166945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 167945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 168945aea22SJiri Olsa PERF_TYPE_BREAKPOINT == evsel->attr.type); 169945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config); 170945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 171945aea22SJiri Olsa HW_BREAKPOINT_W == evsel->attr.bp_type); 172945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", 173945aea22SJiri Olsa HW_BREAKPOINT_LEN_4 == evsel->attr.bp_len); 174945aea22SJiri Olsa return 0; 175945aea22SJiri Olsa } 176945aea22SJiri Olsa 177945aea22SJiri Olsa static int test__checkevent_breakpoint_rw(struct perf_evlist *evlist) 178945aea22SJiri Olsa { 179945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 180945aea22SJiri Olsa 181945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 182945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 183945aea22SJiri Olsa PERF_TYPE_BREAKPOINT == evsel->attr.type); 184945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config); 185945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 186945aea22SJiri Olsa (HW_BREAKPOINT_R|HW_BREAKPOINT_W) == evsel->attr.bp_type); 187945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", 188945aea22SJiri Olsa HW_BREAKPOINT_LEN_4 == evsel->attr.bp_len); 189945aea22SJiri Olsa return 0; 190945aea22SJiri Olsa } 191945aea22SJiri Olsa 192945aea22SJiri Olsa static int test__checkevent_tracepoint_modifier(struct perf_evlist *evlist) 193945aea22SJiri Olsa { 194945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 195945aea22SJiri Olsa 196945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 197945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 198945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 199945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 200945aea22SJiri Olsa 201945aea22SJiri Olsa return test__checkevent_tracepoint(evlist); 202945aea22SJiri Olsa } 203945aea22SJiri Olsa 204945aea22SJiri Olsa static int 205945aea22SJiri Olsa test__checkevent_tracepoint_multi_modifier(struct perf_evlist *evlist) 206945aea22SJiri Olsa { 207945aea22SJiri Olsa struct perf_evsel *evsel; 208945aea22SJiri Olsa 209945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", evlist->nr_entries > 1); 210945aea22SJiri Olsa 211e5cadb93SArnaldo Carvalho de Melo evlist__for_each_entry(evlist, evsel) { 212945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", 213945aea22SJiri Olsa !evsel->attr.exclude_user); 214945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", 215945aea22SJiri Olsa evsel->attr.exclude_kernel); 216945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 217945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 218945aea22SJiri Olsa } 219945aea22SJiri Olsa 220945aea22SJiri Olsa return test__checkevent_tracepoint_multi(evlist); 221945aea22SJiri Olsa } 222945aea22SJiri Olsa 223945aea22SJiri Olsa static int test__checkevent_raw_modifier(struct perf_evlist *evlist) 224945aea22SJiri Olsa { 225945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 226945aea22SJiri Olsa 227945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 228945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 229945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 230945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 231945aea22SJiri Olsa 232945aea22SJiri Olsa return test__checkevent_raw(evlist); 233945aea22SJiri Olsa } 234945aea22SJiri Olsa 235945aea22SJiri Olsa static int test__checkevent_numeric_modifier(struct perf_evlist *evlist) 236945aea22SJiri Olsa { 237945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 238945aea22SJiri Olsa 239945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 240945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 241945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 242945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 243945aea22SJiri Olsa 244945aea22SJiri Olsa return test__checkevent_numeric(evlist); 245945aea22SJiri Olsa } 246945aea22SJiri Olsa 247945aea22SJiri Olsa static int test__checkevent_symbolic_name_modifier(struct perf_evlist *evlist) 248945aea22SJiri Olsa { 249945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 250945aea22SJiri Olsa 251945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 252945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 253945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 254945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 255945aea22SJiri Olsa 256945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 257945aea22SJiri Olsa } 258945aea22SJiri Olsa 259945aea22SJiri Olsa static int test__checkevent_exclude_host_modifier(struct perf_evlist *evlist) 260945aea22SJiri Olsa { 261945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 262945aea22SJiri Olsa 263945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 264945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 265945aea22SJiri Olsa 266945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 267945aea22SJiri Olsa } 268945aea22SJiri Olsa 269945aea22SJiri Olsa static int test__checkevent_exclude_guest_modifier(struct perf_evlist *evlist) 270945aea22SJiri Olsa { 271945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 272945aea22SJiri Olsa 273945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 274945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 275945aea22SJiri Olsa 276945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 277945aea22SJiri Olsa } 278945aea22SJiri Olsa 279945aea22SJiri Olsa static int test__checkevent_symbolic_alias_modifier(struct perf_evlist *evlist) 280945aea22SJiri Olsa { 281945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 282945aea22SJiri Olsa 283945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 284945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 285945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 286945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 287945aea22SJiri Olsa 288945aea22SJiri Olsa return test__checkevent_symbolic_alias(evlist); 289945aea22SJiri Olsa } 290945aea22SJiri Olsa 291945aea22SJiri Olsa static int test__checkevent_genhw_modifier(struct perf_evlist *evlist) 292945aea22SJiri Olsa { 293945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 294945aea22SJiri Olsa 295945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 296945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 297945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 298945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 299945aea22SJiri Olsa 300945aea22SJiri Olsa return test__checkevent_genhw(evlist); 301945aea22SJiri Olsa } 302945aea22SJiri Olsa 303a1e12da4SJiri Olsa static int test__checkevent_exclude_idle_modifier(struct perf_evlist *evlist) 304a1e12da4SJiri Olsa { 305a1e12da4SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 306a1e12da4SJiri Olsa 307a1e12da4SJiri Olsa TEST_ASSERT_VAL("wrong exclude idle", evsel->attr.exclude_idle); 308a1e12da4SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 309a1e12da4SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 310a1e12da4SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 311a1e12da4SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 312a1e12da4SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 313a1e12da4SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 314a1e12da4SJiri Olsa 315a1e12da4SJiri Olsa return test__checkevent_symbolic_name(evlist); 316a1e12da4SJiri Olsa } 317a1e12da4SJiri Olsa 318a1e12da4SJiri Olsa static int test__checkevent_exclude_idle_modifier_1(struct perf_evlist *evlist) 319a1e12da4SJiri Olsa { 320a1e12da4SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 321a1e12da4SJiri Olsa 322a1e12da4SJiri Olsa TEST_ASSERT_VAL("wrong exclude idle", evsel->attr.exclude_idle); 323a1e12da4SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 324a1e12da4SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 325a1e12da4SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 326a1e12da4SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 327a1e12da4SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 328a1e12da4SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 329a1e12da4SJiri Olsa 330a1e12da4SJiri Olsa return test__checkevent_symbolic_name(evlist); 331a1e12da4SJiri Olsa } 332a1e12da4SJiri Olsa 333945aea22SJiri Olsa static int test__checkevent_breakpoint_modifier(struct perf_evlist *evlist) 334945aea22SJiri Olsa { 335945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 336945aea22SJiri Olsa 337945aea22SJiri Olsa 338945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 339945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 340945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 341945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 342945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 343945aea22SJiri Olsa !strcmp(perf_evsel__name(evsel), "mem:0:u")); 344945aea22SJiri Olsa 345945aea22SJiri Olsa return test__checkevent_breakpoint(evlist); 346945aea22SJiri Olsa } 347945aea22SJiri Olsa 348945aea22SJiri Olsa static int test__checkevent_breakpoint_x_modifier(struct perf_evlist *evlist) 349945aea22SJiri Olsa { 350945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 351945aea22SJiri Olsa 352945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 353945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 354945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 355945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 356945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 357945aea22SJiri Olsa !strcmp(perf_evsel__name(evsel), "mem:0:x:k")); 358945aea22SJiri Olsa 359945aea22SJiri Olsa return test__checkevent_breakpoint_x(evlist); 360945aea22SJiri Olsa } 361945aea22SJiri Olsa 362945aea22SJiri Olsa static int test__checkevent_breakpoint_r_modifier(struct perf_evlist *evlist) 363945aea22SJiri Olsa { 364945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 365945aea22SJiri Olsa 366945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 367945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 368945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 369945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 370945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 371945aea22SJiri Olsa !strcmp(perf_evsel__name(evsel), "mem:0:r:hp")); 372945aea22SJiri Olsa 373945aea22SJiri Olsa return test__checkevent_breakpoint_r(evlist); 374945aea22SJiri Olsa } 375945aea22SJiri Olsa 376945aea22SJiri Olsa static int test__checkevent_breakpoint_w_modifier(struct perf_evlist *evlist) 377945aea22SJiri Olsa { 378945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 379945aea22SJiri Olsa 380945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 381945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 382945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 383945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 384945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 385945aea22SJiri Olsa !strcmp(perf_evsel__name(evsel), "mem:0:w:up")); 386945aea22SJiri Olsa 387945aea22SJiri Olsa return test__checkevent_breakpoint_w(evlist); 388945aea22SJiri Olsa } 389945aea22SJiri Olsa 390945aea22SJiri Olsa static int test__checkevent_breakpoint_rw_modifier(struct perf_evlist *evlist) 391945aea22SJiri Olsa { 392945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 393945aea22SJiri Olsa 394945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 395945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 396945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 397945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 398945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 399945aea22SJiri Olsa !strcmp(perf_evsel__name(evsel), "mem:0:rw:kp")); 400945aea22SJiri Olsa 401945aea22SJiri Olsa return test__checkevent_breakpoint_rw(evlist); 402945aea22SJiri Olsa } 403945aea22SJiri Olsa 404945aea22SJiri Olsa static int test__checkevent_pmu(struct perf_evlist *evlist) 405945aea22SJiri Olsa { 406945aea22SJiri Olsa 407945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 408945aea22SJiri Olsa 409945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 410945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); 411945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 10 == evsel->attr.config); 412945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config1", 1 == evsel->attr.config1); 413945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config2", 3 == evsel->attr.config2); 414ee4c7588SJiri Olsa /* 415ee4c7588SJiri Olsa * The period value gets configured within perf_evlist__config, 416ee4c7588SJiri Olsa * while this test executes only parse events method. 417ee4c7588SJiri Olsa */ 418ee4c7588SJiri Olsa TEST_ASSERT_VAL("wrong period", 0 == evsel->attr.sample_period); 419945aea22SJiri Olsa 420945aea22SJiri Olsa return 0; 421945aea22SJiri Olsa } 422945aea22SJiri Olsa 423945aea22SJiri Olsa static int test__checkevent_list(struct perf_evlist *evlist) 424945aea22SJiri Olsa { 425945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 426945aea22SJiri Olsa 427945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->nr_entries); 428945aea22SJiri Olsa 429945aea22SJiri Olsa /* r1 */ 430945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); 431945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config); 432945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config1", 0 == evsel->attr.config1); 433945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config2", 0 == evsel->attr.config2); 434945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 435945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 436945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 437945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 438945aea22SJiri Olsa 43943f322b4SRiku Voipio /* syscalls:sys_enter_openat:k */ 440945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 441945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->attr.type); 442945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 443945aea22SJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->attr.sample_type); 444945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->attr.sample_period); 445945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 446945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 447945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 448945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 449945aea22SJiri Olsa 450945aea22SJiri Olsa /* 1:1:hp */ 451945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 452945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->attr.type); 453945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config); 454945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 455945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 456945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 457945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 458945aea22SJiri Olsa 459945aea22SJiri Olsa return 0; 460945aea22SJiri Olsa } 461945aea22SJiri Olsa 462945aea22SJiri Olsa static int test__checkevent_pmu_name(struct perf_evlist *evlist) 463945aea22SJiri Olsa { 464945aea22SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 465945aea22SJiri Olsa 466945aea22SJiri Olsa /* cpu/config=1,name=krava/u */ 467945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); 468945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); 469945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config); 470945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", !strcmp(perf_evsel__name(evsel), "krava")); 471945aea22SJiri Olsa 472945aea22SJiri Olsa /* cpu/config=2/u" */ 473945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 474945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); 475945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); 476945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 2 == evsel->attr.config); 477945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 478945aea22SJiri Olsa !strcmp(perf_evsel__name(evsel), "cpu/config=2/u")); 479945aea22SJiri Olsa 480945aea22SJiri Olsa return 0; 481945aea22SJiri Olsa } 482945aea22SJiri Olsa 48371ef150eSKan Liang static int test__checkevent_pmu_partial_time_callgraph(struct perf_evlist *evlist) 48471ef150eSKan Liang { 48571ef150eSKan Liang struct perf_evsel *evsel = perf_evlist__first(evlist); 48671ef150eSKan Liang 48771ef150eSKan Liang /* cpu/config=1,call-graph=fp,time,period=100000/ */ 48871ef150eSKan Liang TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); 48971ef150eSKan Liang TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); 49071ef150eSKan Liang TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config); 49171ef150eSKan Liang /* 49271ef150eSKan Liang * The period, time and callgraph value gets configured 49371ef150eSKan Liang * within perf_evlist__config, 49471ef150eSKan Liang * while this test executes only parse events method. 49571ef150eSKan Liang */ 49671ef150eSKan Liang TEST_ASSERT_VAL("wrong period", 0 == evsel->attr.sample_period); 49771ef150eSKan Liang TEST_ASSERT_VAL("wrong callgraph", !(PERF_SAMPLE_CALLCHAIN & evsel->attr.sample_type)); 49871ef150eSKan Liang TEST_ASSERT_VAL("wrong time", !(PERF_SAMPLE_TIME & evsel->attr.sample_type)); 49971ef150eSKan Liang 50071ef150eSKan Liang /* cpu/config=2,call-graph=no,time=0,period=2000/ */ 50171ef150eSKan Liang evsel = perf_evsel__next(evsel); 50271ef150eSKan Liang TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); 50371ef150eSKan Liang TEST_ASSERT_VAL("wrong config", 2 == evsel->attr.config); 50471ef150eSKan Liang /* 50571ef150eSKan Liang * The period, time and callgraph value gets configured 50671ef150eSKan Liang * within perf_evlist__config, 50771ef150eSKan Liang * while this test executes only parse events method. 50871ef150eSKan Liang */ 50971ef150eSKan Liang TEST_ASSERT_VAL("wrong period", 0 == evsel->attr.sample_period); 51071ef150eSKan Liang TEST_ASSERT_VAL("wrong callgraph", !(PERF_SAMPLE_CALLCHAIN & evsel->attr.sample_type)); 51171ef150eSKan Liang TEST_ASSERT_VAL("wrong time", !(PERF_SAMPLE_TIME & evsel->attr.sample_type)); 51271ef150eSKan Liang 51371ef150eSKan Liang return 0; 51471ef150eSKan Liang } 51571ef150eSKan Liang 516945aea22SJiri Olsa static int test__checkevent_pmu_events(struct perf_evlist *evlist) 517945aea22SJiri Olsa { 5189a354cdcSArnaldo Carvalho de Melo struct perf_evsel *evsel = perf_evlist__first(evlist); 519945aea22SJiri Olsa 520945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 521945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); 522945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", 523945aea22SJiri Olsa !evsel->attr.exclude_user); 524945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", 525945aea22SJiri Olsa evsel->attr.exclude_kernel); 526945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 527945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 528c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong pinned", !evsel->attr.pinned); 529945aea22SJiri Olsa 530945aea22SJiri Olsa return 0; 531945aea22SJiri Olsa } 532945aea22SJiri Olsa 533ffe59788SKan Liang 534ffe59788SKan Liang static int test__checkevent_pmu_events_mix(struct perf_evlist *evlist) 535ffe59788SKan Liang { 536ffe59788SKan Liang struct perf_evsel *evsel = perf_evlist__first(evlist); 537ffe59788SKan Liang 538ffe59788SKan Liang /* pmu-event:u */ 539ffe59788SKan Liang TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); 540ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_user", 541ffe59788SKan Liang !evsel->attr.exclude_user); 542ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_kernel", 543ffe59788SKan Liang evsel->attr.exclude_kernel); 544ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 545ffe59788SKan Liang TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 546ffe59788SKan Liang TEST_ASSERT_VAL("wrong pinned", !evsel->attr.pinned); 547ffe59788SKan Liang 548ffe59788SKan Liang /* cpu/pmu-event/u*/ 549ffe59788SKan Liang evsel = perf_evsel__next(evsel); 550ffe59788SKan Liang TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); 551ffe59788SKan Liang TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); 552ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_user", 553ffe59788SKan Liang !evsel->attr.exclude_user); 554ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_kernel", 555ffe59788SKan Liang evsel->attr.exclude_kernel); 556ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 557ffe59788SKan Liang TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 558ffe59788SKan Liang TEST_ASSERT_VAL("wrong pinned", !evsel->attr.pinned); 559ffe59788SKan Liang 560ffe59788SKan Liang return 0; 561ffe59788SKan Liang } 562ffe59788SKan Liang 563945aea22SJiri Olsa static int test__checkterms_simple(struct list_head *terms) 564945aea22SJiri Olsa { 5656cee6cd3SArnaldo Carvalho de Melo struct parse_events_term *term; 566945aea22SJiri Olsa 567945aea22SJiri Olsa /* config=10 */ 5686cee6cd3SArnaldo Carvalho de Melo term = list_entry(terms->next, struct parse_events_term, list); 569945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 570945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG); 571945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 572945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 573945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 10); 574945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", !term->config); 575945aea22SJiri Olsa 576945aea22SJiri Olsa /* config1 */ 5776cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 578945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 579945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG1); 580945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 581945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 582945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 1); 583945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", !term->config); 584945aea22SJiri Olsa 585945aea22SJiri Olsa /* config2=3 */ 5866cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 587945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 588945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG2); 589945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 590945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 591945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 3); 592945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", !term->config); 593945aea22SJiri Olsa 594945aea22SJiri Olsa /* umask=1*/ 5956cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 596945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 597945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_USER); 598945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 599945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 600945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 1); 601945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "umask")); 602945aea22SJiri Olsa 603945aea22SJiri Olsa return 0; 604945aea22SJiri Olsa } 605945aea22SJiri Olsa 606945aea22SJiri Olsa static int test__group1(struct perf_evlist *evlist) 607945aea22SJiri Olsa { 608945aea22SJiri Olsa struct perf_evsel *evsel, *leader; 609945aea22SJiri Olsa 610945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); 6118d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 612945aea22SJiri Olsa 613945aea22SJiri Olsa /* instructions:k */ 614945aea22SJiri Olsa evsel = leader = perf_evlist__first(evlist); 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_INSTRUCTIONS == 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 TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 622945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 623945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 624823254edSNamhyung Kim TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 6258d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); 6268d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 627a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 628945aea22SJiri Olsa 629945aea22SJiri Olsa /* cycles:upp */ 630945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 631945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 632945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 633945aea22SJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 634945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 635945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 636945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 637945aea22SJiri Olsa /* use of precise requires exclude_guest */ 638945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 639945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 640945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 2); 641945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 6428d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 643a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 644945aea22SJiri Olsa 645945aea22SJiri Olsa return 0; 646945aea22SJiri Olsa } 647945aea22SJiri Olsa 648945aea22SJiri Olsa static int test__group2(struct perf_evlist *evlist) 649945aea22SJiri Olsa { 650945aea22SJiri Olsa struct perf_evsel *evsel, *leader; 651945aea22SJiri Olsa 652945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->nr_entries); 6538d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 654945aea22SJiri Olsa 655945aea22SJiri Olsa /* faults + :ku modifier */ 656945aea22SJiri Olsa evsel = leader = perf_evlist__first(evlist); 657945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->attr.type); 658945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 659945aea22SJiri Olsa PERF_COUNT_SW_PAGE_FAULTS == 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); 666823254edSNamhyung Kim TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 6678d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); 6688d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 669a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 670945aea22SJiri Olsa 671945aea22SJiri Olsa /* cache-references + :u modifier */ 672945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 673945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 674945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 675945aea22SJiri Olsa PERF_COUNT_HW_CACHE_REFERENCES == evsel->attr.config); 676945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 677945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 678945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 6795a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 680945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 681945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 682945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 6838d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 684a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 685945aea22SJiri Olsa 686945aea22SJiri Olsa /* cycles:k */ 687945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 688945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 689945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 690945aea22SJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 691945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 692945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 693945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 694945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 695945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 696945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 697823254edSNamhyung Kim TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 698a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 699945aea22SJiri Olsa 700945aea22SJiri Olsa return 0; 701945aea22SJiri Olsa } 702945aea22SJiri Olsa 703945aea22SJiri Olsa static int test__group3(struct perf_evlist *evlist __maybe_unused) 704945aea22SJiri Olsa { 705945aea22SJiri Olsa struct perf_evsel *evsel, *leader; 706945aea22SJiri Olsa 707945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->nr_entries); 7088d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong number of groups", 2 == evlist->nr_groups); 709945aea22SJiri Olsa 71043f322b4SRiku Voipio /* group1 syscalls:sys_enter_openat:H */ 711945aea22SJiri Olsa evsel = leader = perf_evlist__first(evlist); 712945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->attr.type); 713945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 714945aea22SJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->attr.sample_type); 715945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->attr.sample_period); 716945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 717945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 718945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 719945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 720945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 721945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 722823254edSNamhyung Kim TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 723945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", 724945aea22SJiri Olsa !strcmp(leader->group_name, "group1")); 7258d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); 7268d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 727a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 728945aea22SJiri Olsa 729945aea22SJiri Olsa /* group1 cycles:kppp */ 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_CPU_CYCLES == 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 /* use of precise requires exclude_guest */ 738945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 739945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 740945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 3); 741945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 742945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 7438d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 744a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 745945aea22SJiri Olsa 746945aea22SJiri Olsa /* group2 cycles + G modifier */ 747945aea22SJiri Olsa evsel = leader = perf_evsel__next(evsel); 748945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 749945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 750945aea22SJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 751945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 752945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 753945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 754945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 755945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 756945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 757823254edSNamhyung Kim TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 758945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", 759945aea22SJiri Olsa !strcmp(leader->group_name, "group2")); 7608d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); 7618d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 762a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 763945aea22SJiri Olsa 764945aea22SJiri Olsa /* group2 1:3 + G modifier */ 765945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 766945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->attr.type); 767945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 3 == evsel->attr.config); 768945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 769945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 770945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 771945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 772945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 773945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 774945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 7758d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 776a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 777945aea22SJiri Olsa 778945aea22SJiri Olsa /* instructions:u */ 779945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 780945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 781945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 782945aea22SJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); 783945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 784945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 785945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 786945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 787945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 788945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 789823254edSNamhyung Kim TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 790a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 791945aea22SJiri Olsa 792945aea22SJiri Olsa return 0; 793945aea22SJiri Olsa } 794945aea22SJiri Olsa 795945aea22SJiri Olsa static int test__group4(struct perf_evlist *evlist __maybe_unused) 796945aea22SJiri Olsa { 797945aea22SJiri Olsa struct perf_evsel *evsel, *leader; 798945aea22SJiri Olsa 799945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); 8008d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 801945aea22SJiri Olsa 802945aea22SJiri Olsa /* cycles:u + p */ 803945aea22SJiri Olsa evsel = leader = perf_evlist__first(evlist); 804945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 805945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 806945aea22SJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 807945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 808945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 809945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 810945aea22SJiri Olsa /* use of precise requires exclude_guest */ 811945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 812945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 813945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 1); 814945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 815823254edSNamhyung Kim TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 8168d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); 8178d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 818a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 819945aea22SJiri Olsa 820945aea22SJiri Olsa /* instructions:kp + p */ 821945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 822945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 823945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 824945aea22SJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); 825945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 826945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 827945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 828945aea22SJiri Olsa /* use of precise requires exclude_guest */ 829945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 830945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 831945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 2); 832945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 8338d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 834a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 835945aea22SJiri Olsa 836945aea22SJiri Olsa return 0; 837945aea22SJiri Olsa } 838945aea22SJiri Olsa 839945aea22SJiri Olsa static int test__group5(struct perf_evlist *evlist __maybe_unused) 840945aea22SJiri Olsa { 841945aea22SJiri Olsa struct perf_evsel *evsel, *leader; 842945aea22SJiri Olsa 843945aea22SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->nr_entries); 8448d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong number of groups", 2 == evlist->nr_groups); 845945aea22SJiri Olsa 846945aea22SJiri Olsa /* cycles + G */ 847945aea22SJiri Olsa evsel = leader = perf_evlist__first(evlist); 848945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 849945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 850945aea22SJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 851945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 852945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 853945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 854945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 855945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 856945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 857945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 858823254edSNamhyung Kim TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 8598d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); 8608d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 861a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 862945aea22SJiri Olsa 863945aea22SJiri Olsa /* instructions + G */ 864945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 865945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 866945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 867945aea22SJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); 868945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 869945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 870945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 871945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 872945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 873945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 874945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 8758d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 876a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 877945aea22SJiri Olsa 878945aea22SJiri Olsa /* cycles:G */ 879945aea22SJiri Olsa evsel = leader = perf_evsel__next(evsel); 880945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 881945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 882945aea22SJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 883945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 884945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 885945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 886945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 887945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 888945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 889945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 890823254edSNamhyung Kim TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 8918d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); 8928d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 893a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 894945aea22SJiri Olsa 895945aea22SJiri Olsa /* instructions:G */ 896945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 897945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 898945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 899945aea22SJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); 900945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 901945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 902945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 903945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 904945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 905945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 906945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 9078d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 908945aea22SJiri Olsa 909945aea22SJiri Olsa /* cycles */ 910945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 911945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 912945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 913945aea22SJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 914945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 915945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 916945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 917945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 918945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 919945aea22SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 920823254edSNamhyung Kim TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 921945aea22SJiri Olsa 922945aea22SJiri Olsa return 0; 923945aea22SJiri Olsa } 924945aea22SJiri Olsa 9255a30a99fSJiri Olsa static int test__group_gh1(struct perf_evlist *evlist) 9265a30a99fSJiri Olsa { 9275a30a99fSJiri Olsa struct perf_evsel *evsel, *leader; 9285a30a99fSJiri Olsa 9295a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); 9305a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 9315a30a99fSJiri Olsa 9325a30a99fSJiri Olsa /* cycles + :H group modifier */ 9335a30a99fSJiri Olsa evsel = leader = perf_evlist__first(evlist); 9345a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 9355a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 9365a30a99fSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 9375a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 9385a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 9395a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 9405a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 9415a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 9425a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 9435a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 9445a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 9455a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); 9465a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 9475a30a99fSJiri Olsa 9485a30a99fSJiri Olsa /* cache-misses:G + :H group modifier */ 9495a30a99fSJiri Olsa evsel = perf_evsel__next(evsel); 9505a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 9515a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 9525a30a99fSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->attr.config); 9535a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 9545a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 9555a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 9565a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 9575a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 9585a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 9595a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 9605a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 9615a30a99fSJiri Olsa 9625a30a99fSJiri Olsa return 0; 9635a30a99fSJiri Olsa } 9645a30a99fSJiri Olsa 9655a30a99fSJiri Olsa static int test__group_gh2(struct perf_evlist *evlist) 9665a30a99fSJiri Olsa { 9675a30a99fSJiri Olsa struct perf_evsel *evsel, *leader; 9685a30a99fSJiri Olsa 9695a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); 9705a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 9715a30a99fSJiri Olsa 9725a30a99fSJiri Olsa /* cycles + :G group modifier */ 9735a30a99fSJiri Olsa evsel = leader = perf_evlist__first(evlist); 9745a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 9755a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 9765a30a99fSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 9775a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 9785a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 9795a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 9805a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 9815a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 9825a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 9835a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 9845a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 9855a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); 9865a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 9875a30a99fSJiri Olsa 9885a30a99fSJiri Olsa /* cache-misses:H + :G group modifier */ 9895a30a99fSJiri Olsa evsel = perf_evsel__next(evsel); 9905a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 9915a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 9925a30a99fSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->attr.config); 9935a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 9945a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 9955a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 9965a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 9975a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 9985a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 9995a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 10005a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 10015a30a99fSJiri Olsa 10025a30a99fSJiri Olsa return 0; 10035a30a99fSJiri Olsa } 10045a30a99fSJiri Olsa 10055a30a99fSJiri Olsa static int test__group_gh3(struct perf_evlist *evlist) 10065a30a99fSJiri Olsa { 10075a30a99fSJiri Olsa struct perf_evsel *evsel, *leader; 10085a30a99fSJiri Olsa 10095a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); 10105a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 10115a30a99fSJiri Olsa 10125a30a99fSJiri Olsa /* cycles:G + :u group modifier */ 10135a30a99fSJiri Olsa evsel = leader = perf_evlist__first(evlist); 10145a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 10155a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 10165a30a99fSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 10175a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 10185a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 10195a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 10205a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 10215a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 10225a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 10235a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 10245a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 10255a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); 10265a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 10275a30a99fSJiri Olsa 10285a30a99fSJiri Olsa /* cache-misses:H + :u group modifier */ 10295a30a99fSJiri Olsa evsel = perf_evsel__next(evsel); 10305a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 10315a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 10325a30a99fSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->attr.config); 10335a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 10345a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 10355a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 10365a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 10375a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 10385a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 10395a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 10405a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 10415a30a99fSJiri Olsa 10425a30a99fSJiri Olsa return 0; 10435a30a99fSJiri Olsa } 10445a30a99fSJiri Olsa 10455a30a99fSJiri Olsa static int test__group_gh4(struct perf_evlist *evlist) 10465a30a99fSJiri Olsa { 10475a30a99fSJiri Olsa struct perf_evsel *evsel, *leader; 10485a30a99fSJiri Olsa 10495a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); 10505a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 10515a30a99fSJiri Olsa 10525a30a99fSJiri Olsa /* cycles:G + :uG group modifier */ 10535a30a99fSJiri Olsa evsel = leader = perf_evlist__first(evlist); 10545a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 10555a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 10565a30a99fSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 10575a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 10585a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 10595a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 10605a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 10615a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 10625a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 10635a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 10645a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 10655a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); 10665a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 10675a30a99fSJiri Olsa 10685a30a99fSJiri Olsa /* cache-misses:H + :uG group modifier */ 10695a30a99fSJiri Olsa evsel = perf_evsel__next(evsel); 10705a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 10715a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 10725a30a99fSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->attr.config); 10735a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 10745a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 10755a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 10765a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 10775a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 10785a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 10795a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 10805a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 10815a30a99fSJiri Olsa 10825a30a99fSJiri Olsa return 0; 10835a30a99fSJiri Olsa } 10845a30a99fSJiri Olsa 1085a9f93f97SJiri Olsa static int test__leader_sample1(struct perf_evlist *evlist) 1086a9f93f97SJiri Olsa { 1087a9f93f97SJiri Olsa struct perf_evsel *evsel, *leader; 1088a9f93f97SJiri Olsa 1089a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->nr_entries); 1090a9f93f97SJiri Olsa 1091a9f93f97SJiri Olsa /* cycles - sampling group leader */ 1092a9f93f97SJiri Olsa evsel = leader = perf_evlist__first(evlist); 1093a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 1094a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong config", 1095a9f93f97SJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 1096a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 1097a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 1098a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 1099a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 1100a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 1101a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 1102a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1103a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 1104a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1105a9f93f97SJiri Olsa 1106a9f93f97SJiri Olsa /* cache-misses - not sampling */ 1107a9f93f97SJiri Olsa evsel = perf_evsel__next(evsel); 1108a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 1109a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong config", 1110a9f93f97SJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->attr.config); 1111a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 1112a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 1113a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 1114a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 1115a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 1116a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 1117a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 1118a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1119a9f93f97SJiri Olsa 1120a9f93f97SJiri Olsa /* branch-misses - not sampling */ 1121a9f93f97SJiri Olsa evsel = perf_evsel__next(evsel); 1122a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 1123a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong config", 1124a9f93f97SJiri Olsa PERF_COUNT_HW_BRANCH_MISSES == evsel->attr.config); 1125a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 1126a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 1127a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 1128a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 1129a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 1130a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 1131a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1132a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 1133a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1134a9f93f97SJiri Olsa 1135a9f93f97SJiri Olsa return 0; 1136a9f93f97SJiri Olsa } 1137a9f93f97SJiri Olsa 1138a9f93f97SJiri Olsa static int test__leader_sample2(struct perf_evlist *evlist __maybe_unused) 1139a9f93f97SJiri Olsa { 1140a9f93f97SJiri Olsa struct perf_evsel *evsel, *leader; 1141a9f93f97SJiri Olsa 1142a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); 1143a9f93f97SJiri Olsa 1144a9f93f97SJiri Olsa /* instructions - sampling group leader */ 1145a9f93f97SJiri Olsa evsel = leader = perf_evlist__first(evlist); 1146a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 1147a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong config", 1148a9f93f97SJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); 1149a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 1150a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 1151a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 1152a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 1153a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 1154a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 1155a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1156a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 1157a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1158a9f93f97SJiri Olsa 1159a9f93f97SJiri Olsa /* branch-misses - not sampling */ 1160a9f93f97SJiri Olsa evsel = perf_evsel__next(evsel); 1161a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 1162a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong config", 1163a9f93f97SJiri Olsa PERF_COUNT_HW_BRANCH_MISSES == evsel->attr.config); 1164a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 1165a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 1166a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 1167a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 1168a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 1169a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 1170a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1171a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 1172a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1173a9f93f97SJiri Olsa 1174a9f93f97SJiri Olsa return 0; 1175a9f93f97SJiri Olsa } 1176a9f93f97SJiri Olsa 1177c9ee780fSMichael Ellerman static int test__checkevent_pinned_modifier(struct perf_evlist *evlist) 1178c9ee780fSMichael Ellerman { 1179c9ee780fSMichael Ellerman struct perf_evsel *evsel = perf_evlist__first(evlist); 1180c9ee780fSMichael Ellerman 1181c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 1182c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 1183c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 1184c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 1185c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong pinned", evsel->attr.pinned); 1186c9ee780fSMichael Ellerman 1187c9ee780fSMichael Ellerman return test__checkevent_symbolic_name(evlist); 1188c9ee780fSMichael Ellerman } 1189c9ee780fSMichael Ellerman 1190c9ee780fSMichael Ellerman static int test__pinned_group(struct perf_evlist *evlist) 1191c9ee780fSMichael Ellerman { 1192c9ee780fSMichael Ellerman struct perf_evsel *evsel, *leader; 1193c9ee780fSMichael Ellerman 1194c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->nr_entries); 1195c9ee780fSMichael Ellerman 1196c9ee780fSMichael Ellerman /* cycles - group leader */ 1197c9ee780fSMichael Ellerman evsel = leader = perf_evlist__first(evlist); 1198c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 1199c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong config", 1200c9ee780fSMichael Ellerman PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 1201c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1202c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 1203c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong pinned", evsel->attr.pinned); 1204c9ee780fSMichael Ellerman 1205c9ee780fSMichael Ellerman /* cache-misses - can not be pinned, but will go on with the leader */ 1206c9ee780fSMichael Ellerman evsel = perf_evsel__next(evsel); 1207c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 1208c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong config", 1209c9ee780fSMichael Ellerman PERF_COUNT_HW_CACHE_MISSES == evsel->attr.config); 1210c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong pinned", !evsel->attr.pinned); 1211c9ee780fSMichael Ellerman 1212c9ee780fSMichael Ellerman /* branch-misses - ditto */ 1213c9ee780fSMichael Ellerman evsel = perf_evsel__next(evsel); 1214c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong config", 1215c9ee780fSMichael Ellerman PERF_COUNT_HW_BRANCH_MISSES == evsel->attr.config); 1216c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong pinned", !evsel->attr.pinned); 1217c9ee780fSMichael Ellerman 1218c9ee780fSMichael Ellerman return 0; 1219c9ee780fSMichael Ellerman } 1220c9ee780fSMichael Ellerman 1221ec32398cSJacob Shin static int test__checkevent_breakpoint_len(struct perf_evlist *evlist) 1222ec32398cSJacob Shin { 1223ec32398cSJacob Shin struct perf_evsel *evsel = perf_evlist__first(evlist); 1224ec32398cSJacob Shin 1225ec32398cSJacob Shin TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 1226ec32398cSJacob Shin TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->attr.type); 1227ec32398cSJacob Shin TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config); 1228ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) == 1229ec32398cSJacob Shin evsel->attr.bp_type); 1230ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_1 == 1231ec32398cSJacob Shin evsel->attr.bp_len); 1232ec32398cSJacob Shin 1233ec32398cSJacob Shin return 0; 1234ec32398cSJacob Shin } 1235ec32398cSJacob Shin 1236ec32398cSJacob Shin static int test__checkevent_breakpoint_len_w(struct perf_evlist *evlist) 1237ec32398cSJacob Shin { 1238ec32398cSJacob Shin struct perf_evsel *evsel = perf_evlist__first(evlist); 1239ec32398cSJacob Shin 1240ec32398cSJacob Shin TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 1241ec32398cSJacob Shin TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->attr.type); 1242ec32398cSJacob Shin TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config); 1243ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_type", HW_BREAKPOINT_W == 1244ec32398cSJacob Shin evsel->attr.bp_type); 1245ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_2 == 1246ec32398cSJacob Shin evsel->attr.bp_len); 1247ec32398cSJacob Shin 1248ec32398cSJacob Shin return 0; 1249ec32398cSJacob Shin } 1250ec32398cSJacob Shin 1251ec32398cSJacob Shin static int 1252ec32398cSJacob Shin test__checkevent_breakpoint_len_rw_modifier(struct perf_evlist *evlist) 1253ec32398cSJacob Shin { 1254ec32398cSJacob Shin struct perf_evsel *evsel = perf_evlist__first(evlist); 1255ec32398cSJacob Shin 1256ec32398cSJacob Shin TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 1257ec32398cSJacob Shin TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 1258ec32398cSJacob Shin TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 1259ec32398cSJacob Shin TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 1260ec32398cSJacob Shin 1261ec32398cSJacob Shin return test__checkevent_breakpoint_rw(evlist); 1262ec32398cSJacob Shin } 1263ec32398cSJacob Shin 1264ddd83c97SJiri Olsa static int test__checkevent_precise_max_modifier(struct perf_evlist *evlist) 1265ddd83c97SJiri Olsa { 1266ddd83c97SJiri Olsa struct perf_evsel *evsel = perf_evlist__first(evlist); 1267ddd83c97SJiri Olsa 1268ddd83c97SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); 1269ddd83c97SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->attr.type); 1270ddd83c97SJiri Olsa TEST_ASSERT_VAL("wrong config", 1271ddd83c97SJiri Olsa PERF_COUNT_SW_TASK_CLOCK == evsel->attr.config); 1272ddd83c97SJiri Olsa return 0; 1273ddd83c97SJiri Olsa } 1274ddd83c97SJiri Olsa 127510bf358aSWang Nan static int test__checkevent_config_symbol(struct perf_evlist *evlist) 127610bf358aSWang Nan { 127710bf358aSWang Nan struct perf_evsel *evsel = perf_evlist__first(evlist); 127810bf358aSWang Nan 127910bf358aSWang Nan TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "insn") == 0); 128010bf358aSWang Nan return 0; 128110bf358aSWang Nan } 128210bf358aSWang Nan 128310bf358aSWang Nan static int test__checkevent_config_raw(struct perf_evlist *evlist) 128410bf358aSWang Nan { 128510bf358aSWang Nan struct perf_evsel *evsel = perf_evlist__first(evlist); 128610bf358aSWang Nan 128710bf358aSWang Nan TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "rawpmu") == 0); 128810bf358aSWang Nan return 0; 128910bf358aSWang Nan } 129010bf358aSWang Nan 129110bf358aSWang Nan static int test__checkevent_config_num(struct perf_evlist *evlist) 129210bf358aSWang Nan { 129310bf358aSWang Nan struct perf_evsel *evsel = perf_evlist__first(evlist); 129410bf358aSWang Nan 129510bf358aSWang Nan TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "numpmu") == 0); 129610bf358aSWang Nan return 0; 129710bf358aSWang Nan } 129810bf358aSWang Nan 129943d0b978SWang Nan static int test__checkevent_config_cache(struct perf_evlist *evlist) 130043d0b978SWang Nan { 130143d0b978SWang Nan struct perf_evsel *evsel = perf_evlist__first(evlist); 130243d0b978SWang Nan 130343d0b978SWang Nan TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "cachepmu") == 0); 130443d0b978SWang Nan return 0; 130543d0b978SWang Nan } 130610bf358aSWang Nan 130782ce75d9SJiri Olsa static int count_tracepoints(void) 130882ce75d9SJiri Olsa { 130982ce75d9SJiri Olsa struct dirent *events_ent; 131082ce75d9SJiri Olsa DIR *events_dir; 131182ce75d9SJiri Olsa int cnt = 0; 131282ce75d9SJiri Olsa 1313fbf99625SJiri Olsa events_dir = opendir(tracing_events_path); 131482ce75d9SJiri Olsa 131582ce75d9SJiri Olsa TEST_ASSERT_VAL("Can't open events dir", events_dir); 131682ce75d9SJiri Olsa 131782ce75d9SJiri Olsa while ((events_ent = readdir(events_dir))) { 131882ce75d9SJiri Olsa char sys_path[PATH_MAX]; 131982ce75d9SJiri Olsa struct dirent *sys_ent; 132082ce75d9SJiri Olsa DIR *sys_dir; 132182ce75d9SJiri Olsa 132282ce75d9SJiri Olsa if (!strcmp(events_ent->d_name, ".") 132382ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "..") 132482ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "enable") 132582ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "header_event") 132682ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "header_page")) 132782ce75d9SJiri Olsa continue; 132882ce75d9SJiri Olsa 132982ce75d9SJiri Olsa scnprintf(sys_path, PATH_MAX, "%s/%s", 1330fbf99625SJiri Olsa tracing_events_path, events_ent->d_name); 133182ce75d9SJiri Olsa 133282ce75d9SJiri Olsa sys_dir = opendir(sys_path); 133382ce75d9SJiri Olsa TEST_ASSERT_VAL("Can't open sys dir", sys_dir); 133482ce75d9SJiri Olsa 133582ce75d9SJiri Olsa while ((sys_ent = readdir(sys_dir))) { 133682ce75d9SJiri Olsa if (!strcmp(sys_ent->d_name, ".") 133782ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "..") 133882ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "enable") 133982ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "filter")) 134082ce75d9SJiri Olsa continue; 134182ce75d9SJiri Olsa 134282ce75d9SJiri Olsa cnt++; 134382ce75d9SJiri Olsa } 134482ce75d9SJiri Olsa 134582ce75d9SJiri Olsa closedir(sys_dir); 134682ce75d9SJiri Olsa } 134782ce75d9SJiri Olsa 134882ce75d9SJiri Olsa closedir(events_dir); 134982ce75d9SJiri Olsa return cnt; 135082ce75d9SJiri Olsa } 135182ce75d9SJiri Olsa 135282ce75d9SJiri Olsa static int test__all_tracepoints(struct perf_evlist *evlist) 135382ce75d9SJiri Olsa { 135482ce75d9SJiri Olsa TEST_ASSERT_VAL("wrong events count", 135582ce75d9SJiri Olsa count_tracepoints() == evlist->nr_entries); 135682ce75d9SJiri Olsa 135782ce75d9SJiri Olsa return test__checkevent_tracepoint_multi(evlist); 135882ce75d9SJiri Olsa } 135982ce75d9SJiri Olsa 136023b6339bSArnaldo Carvalho de Melo struct evlist_test { 1361945aea22SJiri Olsa const char *name; 1362945aea22SJiri Olsa __u32 type; 1363615b8f99SAlexander Yarygin const int id; 1364945aea22SJiri Olsa int (*check)(struct perf_evlist *evlist); 1365945aea22SJiri Olsa }; 1366945aea22SJiri Olsa 136723b6339bSArnaldo Carvalho de Melo static struct evlist_test test__events[] = { 1368615b8f99SAlexander Yarygin { 136943f322b4SRiku Voipio .name = "syscalls:sys_enter_openat", 1370945aea22SJiri Olsa .check = test__checkevent_tracepoint, 1371615b8f99SAlexander Yarygin .id = 0, 1372945aea22SJiri Olsa }, 1373615b8f99SAlexander Yarygin { 1374945aea22SJiri Olsa .name = "syscalls:*", 1375945aea22SJiri Olsa .check = test__checkevent_tracepoint_multi, 1376615b8f99SAlexander Yarygin .id = 1, 1377945aea22SJiri Olsa }, 1378615b8f99SAlexander Yarygin { 1379945aea22SJiri Olsa .name = "r1a", 1380945aea22SJiri Olsa .check = test__checkevent_raw, 1381615b8f99SAlexander Yarygin .id = 2, 1382945aea22SJiri Olsa }, 1383615b8f99SAlexander Yarygin { 1384945aea22SJiri Olsa .name = "1:1", 1385945aea22SJiri Olsa .check = test__checkevent_numeric, 1386615b8f99SAlexander Yarygin .id = 3, 1387945aea22SJiri Olsa }, 1388615b8f99SAlexander Yarygin { 1389945aea22SJiri Olsa .name = "instructions", 1390945aea22SJiri Olsa .check = test__checkevent_symbolic_name, 1391615b8f99SAlexander Yarygin .id = 4, 1392945aea22SJiri Olsa }, 1393615b8f99SAlexander Yarygin { 1394945aea22SJiri Olsa .name = "cycles/period=100000,config2/", 1395945aea22SJiri Olsa .check = test__checkevent_symbolic_name_config, 1396615b8f99SAlexander Yarygin .id = 5, 1397945aea22SJiri Olsa }, 1398615b8f99SAlexander Yarygin { 1399945aea22SJiri Olsa .name = "faults", 1400945aea22SJiri Olsa .check = test__checkevent_symbolic_alias, 1401615b8f99SAlexander Yarygin .id = 6, 1402945aea22SJiri Olsa }, 1403615b8f99SAlexander Yarygin { 1404945aea22SJiri Olsa .name = "L1-dcache-load-miss", 1405945aea22SJiri Olsa .check = test__checkevent_genhw, 1406615b8f99SAlexander Yarygin .id = 7, 1407945aea22SJiri Olsa }, 1408615b8f99SAlexander Yarygin { 1409945aea22SJiri Olsa .name = "mem:0", 1410945aea22SJiri Olsa .check = test__checkevent_breakpoint, 1411615b8f99SAlexander Yarygin .id = 8, 1412945aea22SJiri Olsa }, 1413615b8f99SAlexander Yarygin { 1414945aea22SJiri Olsa .name = "mem:0:x", 1415945aea22SJiri Olsa .check = test__checkevent_breakpoint_x, 1416615b8f99SAlexander Yarygin .id = 9, 1417945aea22SJiri Olsa }, 1418615b8f99SAlexander Yarygin { 1419945aea22SJiri Olsa .name = "mem:0:r", 1420945aea22SJiri Olsa .check = test__checkevent_breakpoint_r, 1421615b8f99SAlexander Yarygin .id = 10, 1422945aea22SJiri Olsa }, 1423615b8f99SAlexander Yarygin { 1424945aea22SJiri Olsa .name = "mem:0:w", 1425945aea22SJiri Olsa .check = test__checkevent_breakpoint_w, 1426615b8f99SAlexander Yarygin .id = 11, 1427945aea22SJiri Olsa }, 1428615b8f99SAlexander Yarygin { 142943f322b4SRiku Voipio .name = "syscalls:sys_enter_openat:k", 1430945aea22SJiri Olsa .check = test__checkevent_tracepoint_modifier, 1431615b8f99SAlexander Yarygin .id = 12, 1432945aea22SJiri Olsa }, 1433615b8f99SAlexander Yarygin { 1434945aea22SJiri Olsa .name = "syscalls:*:u", 1435945aea22SJiri Olsa .check = test__checkevent_tracepoint_multi_modifier, 1436615b8f99SAlexander Yarygin .id = 13, 1437945aea22SJiri Olsa }, 1438615b8f99SAlexander Yarygin { 1439945aea22SJiri Olsa .name = "r1a:kp", 1440945aea22SJiri Olsa .check = test__checkevent_raw_modifier, 1441615b8f99SAlexander Yarygin .id = 14, 1442945aea22SJiri Olsa }, 1443615b8f99SAlexander Yarygin { 1444945aea22SJiri Olsa .name = "1:1:hp", 1445945aea22SJiri Olsa .check = test__checkevent_numeric_modifier, 1446615b8f99SAlexander Yarygin .id = 15, 1447945aea22SJiri Olsa }, 1448615b8f99SAlexander Yarygin { 1449945aea22SJiri Olsa .name = "instructions:h", 1450945aea22SJiri Olsa .check = test__checkevent_symbolic_name_modifier, 1451615b8f99SAlexander Yarygin .id = 16, 1452945aea22SJiri Olsa }, 1453615b8f99SAlexander Yarygin { 1454945aea22SJiri Olsa .name = "faults:u", 1455945aea22SJiri Olsa .check = test__checkevent_symbolic_alias_modifier, 1456615b8f99SAlexander Yarygin .id = 17, 1457945aea22SJiri Olsa }, 1458615b8f99SAlexander Yarygin { 1459945aea22SJiri Olsa .name = "L1-dcache-load-miss:kp", 1460945aea22SJiri Olsa .check = test__checkevent_genhw_modifier, 1461615b8f99SAlexander Yarygin .id = 18, 1462945aea22SJiri Olsa }, 1463615b8f99SAlexander Yarygin { 1464945aea22SJiri Olsa .name = "mem:0:u", 1465945aea22SJiri Olsa .check = test__checkevent_breakpoint_modifier, 1466615b8f99SAlexander Yarygin .id = 19, 1467945aea22SJiri Olsa }, 1468615b8f99SAlexander Yarygin { 1469945aea22SJiri Olsa .name = "mem:0:x:k", 1470945aea22SJiri Olsa .check = test__checkevent_breakpoint_x_modifier, 1471615b8f99SAlexander Yarygin .id = 20, 1472945aea22SJiri Olsa }, 1473615b8f99SAlexander Yarygin { 1474945aea22SJiri Olsa .name = "mem:0:r:hp", 1475945aea22SJiri Olsa .check = test__checkevent_breakpoint_r_modifier, 1476615b8f99SAlexander Yarygin .id = 21, 1477945aea22SJiri Olsa }, 1478615b8f99SAlexander Yarygin { 1479945aea22SJiri Olsa .name = "mem:0:w:up", 1480945aea22SJiri Olsa .check = test__checkevent_breakpoint_w_modifier, 1481615b8f99SAlexander Yarygin .id = 22, 1482945aea22SJiri Olsa }, 1483615b8f99SAlexander Yarygin { 148443f322b4SRiku Voipio .name = "r1,syscalls:sys_enter_openat:k,1:1:hp", 1485945aea22SJiri Olsa .check = test__checkevent_list, 1486615b8f99SAlexander Yarygin .id = 23, 1487945aea22SJiri Olsa }, 1488615b8f99SAlexander Yarygin { 1489945aea22SJiri Olsa .name = "instructions:G", 1490945aea22SJiri Olsa .check = test__checkevent_exclude_host_modifier, 1491615b8f99SAlexander Yarygin .id = 24, 1492945aea22SJiri Olsa }, 1493615b8f99SAlexander Yarygin { 1494945aea22SJiri Olsa .name = "instructions:H", 1495945aea22SJiri Olsa .check = test__checkevent_exclude_guest_modifier, 1496615b8f99SAlexander Yarygin .id = 25, 1497945aea22SJiri Olsa }, 1498615b8f99SAlexander Yarygin { 1499945aea22SJiri Olsa .name = "mem:0:rw", 1500945aea22SJiri Olsa .check = test__checkevent_breakpoint_rw, 1501615b8f99SAlexander Yarygin .id = 26, 1502945aea22SJiri Olsa }, 1503615b8f99SAlexander Yarygin { 1504945aea22SJiri Olsa .name = "mem:0:rw:kp", 1505945aea22SJiri Olsa .check = test__checkevent_breakpoint_rw_modifier, 1506615b8f99SAlexander Yarygin .id = 27, 1507945aea22SJiri Olsa }, 1508615b8f99SAlexander Yarygin { 1509945aea22SJiri Olsa .name = "{instructions:k,cycles:upp}", 1510945aea22SJiri Olsa .check = test__group1, 1511615b8f99SAlexander Yarygin .id = 28, 1512945aea22SJiri Olsa }, 1513615b8f99SAlexander Yarygin { 1514945aea22SJiri Olsa .name = "{faults:k,cache-references}:u,cycles:k", 1515945aea22SJiri Olsa .check = test__group2, 1516615b8f99SAlexander Yarygin .id = 29, 1517945aea22SJiri Olsa }, 1518615b8f99SAlexander Yarygin { 151943f322b4SRiku Voipio .name = "group1{syscalls:sys_enter_openat:H,cycles:kppp},group2{cycles,1:3}:G,instructions:u", 1520945aea22SJiri Olsa .check = test__group3, 1521615b8f99SAlexander Yarygin .id = 30, 1522945aea22SJiri Olsa }, 1523615b8f99SAlexander Yarygin { 1524945aea22SJiri Olsa .name = "{cycles:u,instructions:kp}:p", 1525945aea22SJiri Olsa .check = test__group4, 1526615b8f99SAlexander Yarygin .id = 31, 1527945aea22SJiri Olsa }, 1528615b8f99SAlexander Yarygin { 1529945aea22SJiri Olsa .name = "{cycles,instructions}:G,{cycles:G,instructions:G},cycles", 1530945aea22SJiri Olsa .check = test__group5, 1531615b8f99SAlexander Yarygin .id = 32, 1532945aea22SJiri Olsa }, 1533615b8f99SAlexander Yarygin { 153482ce75d9SJiri Olsa .name = "*:*", 153582ce75d9SJiri Olsa .check = test__all_tracepoints, 1536615b8f99SAlexander Yarygin .id = 33, 153782ce75d9SJiri Olsa }, 1538615b8f99SAlexander Yarygin { 15395a30a99fSJiri Olsa .name = "{cycles,cache-misses:G}:H", 15405a30a99fSJiri Olsa .check = test__group_gh1, 1541615b8f99SAlexander Yarygin .id = 34, 15425a30a99fSJiri Olsa }, 1543615b8f99SAlexander Yarygin { 15445a30a99fSJiri Olsa .name = "{cycles,cache-misses:H}:G", 15455a30a99fSJiri Olsa .check = test__group_gh2, 1546615b8f99SAlexander Yarygin .id = 35, 15475a30a99fSJiri Olsa }, 1548615b8f99SAlexander Yarygin { 15495a30a99fSJiri Olsa .name = "{cycles:G,cache-misses:H}:u", 15505a30a99fSJiri Olsa .check = test__group_gh3, 1551615b8f99SAlexander Yarygin .id = 36, 15525a30a99fSJiri Olsa }, 1553615b8f99SAlexander Yarygin { 15545a30a99fSJiri Olsa .name = "{cycles:G,cache-misses:H}:uG", 15555a30a99fSJiri Olsa .check = test__group_gh4, 1556615b8f99SAlexander Yarygin .id = 37, 15575a30a99fSJiri Olsa }, 1558615b8f99SAlexander Yarygin { 1559a9f93f97SJiri Olsa .name = "{cycles,cache-misses,branch-misses}:S", 1560a9f93f97SJiri Olsa .check = test__leader_sample1, 1561615b8f99SAlexander Yarygin .id = 38, 1562a9f93f97SJiri Olsa }, 1563615b8f99SAlexander Yarygin { 1564a9f93f97SJiri Olsa .name = "{instructions,branch-misses}:Su", 1565a9f93f97SJiri Olsa .check = test__leader_sample2, 1566615b8f99SAlexander Yarygin .id = 39, 1567a9f93f97SJiri Olsa }, 1568615b8f99SAlexander Yarygin { 1569c9ee780fSMichael Ellerman .name = "instructions:uDp", 1570c9ee780fSMichael Ellerman .check = test__checkevent_pinned_modifier, 1571615b8f99SAlexander Yarygin .id = 40, 1572c9ee780fSMichael Ellerman }, 1573615b8f99SAlexander Yarygin { 1574c9ee780fSMichael Ellerman .name = "{cycles,cache-misses,branch-misses}:D", 1575c9ee780fSMichael Ellerman .check = test__pinned_group, 1576615b8f99SAlexander Yarygin .id = 41, 1577c9ee780fSMichael Ellerman }, 1578ec32398cSJacob Shin { 1579ec32398cSJacob Shin .name = "mem:0/1", 1580ec32398cSJacob Shin .check = test__checkevent_breakpoint_len, 1581ec32398cSJacob Shin .id = 42, 1582ec32398cSJacob Shin }, 1583ec32398cSJacob Shin { 1584ec32398cSJacob Shin .name = "mem:0/2:w", 1585ec32398cSJacob Shin .check = test__checkevent_breakpoint_len_w, 1586ec32398cSJacob Shin .id = 43, 1587ec32398cSJacob Shin }, 1588ec32398cSJacob Shin { 1589ec32398cSJacob Shin .name = "mem:0/4:rw:u", 1590ec32398cSJacob Shin .check = test__checkevent_breakpoint_len_rw_modifier, 1591ec32398cSJacob Shin .id = 44 1592ec32398cSJacob Shin }, 1593c0bc8c6dSAlexander Yarygin #if defined(__s390x__) 1594c0bc8c6dSAlexander Yarygin { 1595c0bc8c6dSAlexander Yarygin .name = "kvm-s390:kvm_s390_create_vm", 1596c0bc8c6dSAlexander Yarygin .check = test__checkevent_tracepoint, 1597c0bc8c6dSAlexander Yarygin .id = 100, 1598c0bc8c6dSAlexander Yarygin }, 1599c0bc8c6dSAlexander Yarygin #endif 1600a1e12da4SJiri Olsa { 1601a1e12da4SJiri Olsa .name = "instructions:I", 1602a1e12da4SJiri Olsa .check = test__checkevent_exclude_idle_modifier, 1603a1e12da4SJiri Olsa .id = 45, 1604a1e12da4SJiri Olsa }, 1605a1e12da4SJiri Olsa { 1606a1e12da4SJiri Olsa .name = "instructions:kIG", 1607a1e12da4SJiri Olsa .check = test__checkevent_exclude_idle_modifier_1, 1608a1e12da4SJiri Olsa .id = 46, 1609a1e12da4SJiri Olsa }, 1610ddd83c97SJiri Olsa { 1611ddd83c97SJiri Olsa .name = "task-clock:P,cycles", 1612ddd83c97SJiri Olsa .check = test__checkevent_precise_max_modifier, 1613ddd83c97SJiri Olsa .id = 47, 1614ddd83c97SJiri Olsa }, 161510bf358aSWang Nan { 161610bf358aSWang Nan .name = "instructions/name=insn/", 161710bf358aSWang Nan .check = test__checkevent_config_symbol, 161810bf358aSWang Nan .id = 48, 161910bf358aSWang Nan }, 162010bf358aSWang Nan { 162110bf358aSWang Nan .name = "r1234/name=rawpmu/", 162210bf358aSWang Nan .check = test__checkevent_config_raw, 162310bf358aSWang Nan .id = 49, 162410bf358aSWang Nan }, 162510bf358aSWang Nan { 162610bf358aSWang Nan .name = "4:0x6530160/name=numpmu/", 162710bf358aSWang Nan .check = test__checkevent_config_num, 162810bf358aSWang Nan .id = 50, 162910bf358aSWang Nan }, 163043d0b978SWang Nan { 163143d0b978SWang Nan .name = "L1-dcache-misses/name=cachepmu/", 163243d0b978SWang Nan .check = test__checkevent_config_cache, 163343d0b978SWang Nan .id = 51, 163443d0b978SWang Nan }, 1635945aea22SJiri Olsa }; 1636945aea22SJiri Olsa 163723b6339bSArnaldo Carvalho de Melo static struct evlist_test test__events_pmu[] = { 1638615b8f99SAlexander Yarygin { 1639945aea22SJiri Olsa .name = "cpu/config=10,config1,config2=3,period=1000/u", 1640945aea22SJiri Olsa .check = test__checkevent_pmu, 1641615b8f99SAlexander Yarygin .id = 0, 1642945aea22SJiri Olsa }, 1643615b8f99SAlexander Yarygin { 1644945aea22SJiri Olsa .name = "cpu/config=1,name=krava/u,cpu/config=2/u", 1645945aea22SJiri Olsa .check = test__checkevent_pmu_name, 1646615b8f99SAlexander Yarygin .id = 1, 1647945aea22SJiri Olsa }, 164871ef150eSKan Liang { 164971ef150eSKan Liang .name = "cpu/config=1,call-graph=fp,time,period=100000/,cpu/config=2,call-graph=no,time=0,period=2000/", 165071ef150eSKan Liang .check = test__checkevent_pmu_partial_time_callgraph, 165171ef150eSKan Liang .id = 2, 165271ef150eSKan Liang }, 1653945aea22SJiri Olsa }; 1654945aea22SJiri Olsa 165523b6339bSArnaldo Carvalho de Melo struct terms_test { 1656945aea22SJiri Olsa const char *str; 1657945aea22SJiri Olsa __u32 type; 1658945aea22SJiri Olsa int (*check)(struct list_head *terms); 1659945aea22SJiri Olsa }; 1660945aea22SJiri Olsa 166123b6339bSArnaldo Carvalho de Melo static struct terms_test test__terms[] = { 1662945aea22SJiri Olsa [0] = { 1663945aea22SJiri Olsa .str = "config=10,config1,config2=3,umask=1", 1664945aea22SJiri Olsa .check = test__checkterms_simple, 1665945aea22SJiri Olsa }, 1666945aea22SJiri Olsa }; 1667945aea22SJiri Olsa 166823b6339bSArnaldo Carvalho de Melo static int test_event(struct evlist_test *e) 1669945aea22SJiri Olsa { 1670945aea22SJiri Olsa struct perf_evlist *evlist; 1671945aea22SJiri Olsa int ret; 1672945aea22SJiri Olsa 1673334fe7a3SNamhyung Kim evlist = perf_evlist__new(); 1674945aea22SJiri Olsa if (evlist == NULL) 1675945aea22SJiri Olsa return -ENOMEM; 1676945aea22SJiri Olsa 1677b39b8393SJiri Olsa ret = parse_events(evlist, e->name, NULL); 1678945aea22SJiri Olsa if (ret) { 1679945aea22SJiri Olsa pr_debug("failed to parse event '%s', err %d\n", 1680945aea22SJiri Olsa e->name, ret); 16812d4352c0SArnaldo Carvalho de Melo } else { 16822d4352c0SArnaldo Carvalho de Melo ret = e->check(evlist); 1683945aea22SJiri Olsa } 1684945aea22SJiri Olsa 1685945aea22SJiri Olsa perf_evlist__delete(evlist); 1686945aea22SJiri Olsa 1687945aea22SJiri Olsa return ret; 1688945aea22SJiri Olsa } 1689945aea22SJiri Olsa 169023b6339bSArnaldo Carvalho de Melo static int test_events(struct evlist_test *events, unsigned cnt) 1691945aea22SJiri Olsa { 1692945aea22SJiri Olsa int ret1, ret2 = 0; 1693945aea22SJiri Olsa unsigned i; 1694945aea22SJiri Olsa 1695945aea22SJiri Olsa for (i = 0; i < cnt; i++) { 169623b6339bSArnaldo Carvalho de Melo struct evlist_test *e = &events[i]; 1697945aea22SJiri Olsa 1698615b8f99SAlexander Yarygin pr_debug("running test %d '%s'\n", e->id, e->name); 1699945aea22SJiri Olsa ret1 = test_event(e); 1700945aea22SJiri Olsa if (ret1) 1701945aea22SJiri Olsa ret2 = ret1; 1702945aea22SJiri Olsa } 1703945aea22SJiri Olsa 1704945aea22SJiri Olsa return ret2; 1705945aea22SJiri Olsa } 1706945aea22SJiri Olsa 170723b6339bSArnaldo Carvalho de Melo static int test_term(struct terms_test *t) 1708945aea22SJiri Olsa { 1709c549aca5SDavid Ahern struct list_head terms; 1710945aea22SJiri Olsa int ret; 1711945aea22SJiri Olsa 1712c549aca5SDavid Ahern INIT_LIST_HEAD(&terms); 1713945aea22SJiri Olsa 1714c549aca5SDavid Ahern ret = parse_events_terms(&terms, t->str); 1715945aea22SJiri Olsa if (ret) { 1716945aea22SJiri Olsa pr_debug("failed to parse terms '%s', err %d\n", 1717945aea22SJiri Olsa t->str , ret); 1718945aea22SJiri Olsa return ret; 1719945aea22SJiri Olsa } 1720945aea22SJiri Olsa 1721c549aca5SDavid Ahern ret = t->check(&terms); 1722682dc24cSArnaldo Carvalho de Melo parse_events_terms__purge(&terms); 1723945aea22SJiri Olsa 1724945aea22SJiri Olsa return ret; 1725945aea22SJiri Olsa } 1726945aea22SJiri Olsa 172723b6339bSArnaldo Carvalho de Melo static int test_terms(struct terms_test *terms, unsigned cnt) 1728945aea22SJiri Olsa { 1729945aea22SJiri Olsa int ret = 0; 1730945aea22SJiri Olsa unsigned i; 1731945aea22SJiri Olsa 1732945aea22SJiri Olsa for (i = 0; i < cnt; i++) { 173323b6339bSArnaldo Carvalho de Melo struct terms_test *t = &terms[i]; 1734945aea22SJiri Olsa 1735945aea22SJiri Olsa pr_debug("running test %d '%s'\n", i, t->str); 1736945aea22SJiri Olsa ret = test_term(t); 1737945aea22SJiri Olsa if (ret) 1738945aea22SJiri Olsa break; 1739945aea22SJiri Olsa } 1740945aea22SJiri Olsa 1741945aea22SJiri Olsa return ret; 1742945aea22SJiri Olsa } 1743945aea22SJiri Olsa 1744945aea22SJiri Olsa static int test_pmu(void) 1745945aea22SJiri Olsa { 1746945aea22SJiri Olsa struct stat st; 1747945aea22SJiri Olsa char path[PATH_MAX]; 1748945aea22SJiri Olsa int ret; 1749945aea22SJiri Olsa 1750945aea22SJiri Olsa snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/format/", 1751cf38fadaSArnaldo Carvalho de Melo sysfs__mountpoint()); 1752945aea22SJiri Olsa 1753945aea22SJiri Olsa ret = stat(path, &st); 1754945aea22SJiri Olsa if (ret) 1755945aea22SJiri Olsa pr_debug("omitting PMU cpu tests\n"); 1756945aea22SJiri Olsa return !ret; 1757945aea22SJiri Olsa } 1758945aea22SJiri Olsa 1759945aea22SJiri Olsa static int test_pmu_events(void) 1760945aea22SJiri Olsa { 1761945aea22SJiri Olsa struct stat st; 1762945aea22SJiri Olsa char path[PATH_MAX]; 1763945aea22SJiri Olsa struct dirent *ent; 1764945aea22SJiri Olsa DIR *dir; 1765945aea22SJiri Olsa int ret; 1766945aea22SJiri Olsa 1767945aea22SJiri Olsa snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/events/", 1768cf38fadaSArnaldo Carvalho de Melo sysfs__mountpoint()); 1769945aea22SJiri Olsa 1770945aea22SJiri Olsa ret = stat(path, &st); 1771945aea22SJiri Olsa if (ret) { 1772a895d57dSMasanari Iida pr_debug("omitting PMU cpu events tests\n"); 1773945aea22SJiri Olsa return 0; 1774945aea22SJiri Olsa } 1775945aea22SJiri Olsa 1776945aea22SJiri Olsa dir = opendir(path); 1777945aea22SJiri Olsa if (!dir) { 1778945aea22SJiri Olsa pr_debug("can't open pmu event dir"); 1779945aea22SJiri Olsa return -1; 1780945aea22SJiri Olsa } 1781945aea22SJiri Olsa 1782945aea22SJiri Olsa while (!ret && (ent = readdir(dir))) { 178323b6339bSArnaldo Carvalho de Melo struct evlist_test e; 17842e2bbc03SArnaldo Carvalho de Melo char name[2 * NAME_MAX + 1 + 12 + 3]; 1785945aea22SJiri Olsa 178617a2634bSAndi Kleen /* Names containing . are special and cannot be used directly */ 178717a2634bSAndi Kleen if (strchr(ent->d_name, '.')) 1788945aea22SJiri Olsa continue; 1789945aea22SJiri Olsa 17902e2bbc03SArnaldo Carvalho de Melo snprintf(name, sizeof(name), "cpu/event=%s/u", ent->d_name); 1791945aea22SJiri Olsa 1792945aea22SJiri Olsa e.name = name; 1793945aea22SJiri Olsa e.check = test__checkevent_pmu_events; 1794945aea22SJiri Olsa 1795945aea22SJiri Olsa ret = test_event(&e); 1796ffe59788SKan Liang if (ret) 1797ffe59788SKan Liang break; 17982e2bbc03SArnaldo Carvalho de Melo snprintf(name, sizeof(name), "%s:u,cpu/event=%s/u", ent->d_name, ent->d_name); 1799ffe59788SKan Liang e.name = name; 1800ffe59788SKan Liang e.check = test__checkevent_pmu_events_mix; 1801ffe59788SKan Liang ret = test_event(&e); 1802945aea22SJiri Olsa } 1803945aea22SJiri Olsa 1804945aea22SJiri Olsa closedir(dir); 1805945aea22SJiri Olsa return ret; 1806945aea22SJiri Olsa } 1807945aea22SJiri Olsa 18082690c730SNamhyung Kim static void debug_warn(const char *warn, va_list params) 18092690c730SNamhyung Kim { 18102690c730SNamhyung Kim char msg[1024]; 18112690c730SNamhyung Kim 1812bb963e16SNamhyung Kim if (verbose <= 0) 18132690c730SNamhyung Kim return; 18142690c730SNamhyung Kim 18152690c730SNamhyung Kim vsnprintf(msg, sizeof(msg), warn, params); 18162690c730SNamhyung Kim fprintf(stderr, " Warning: %s\n", msg); 18172690c730SNamhyung Kim } 18182690c730SNamhyung Kim 1819721a1f53SArnaldo Carvalho de Melo int test__parse_events(int subtest __maybe_unused) 1820945aea22SJiri Olsa { 1821945aea22SJiri Olsa int ret1, ret2 = 0; 1822945aea22SJiri Olsa 1823945aea22SJiri Olsa #define TEST_EVENTS(tests) \ 1824945aea22SJiri Olsa do { \ 1825945aea22SJiri Olsa ret1 = test_events(tests, ARRAY_SIZE(tests)); \ 1826945aea22SJiri Olsa if (!ret2) \ 1827945aea22SJiri Olsa ret2 = ret1; \ 1828945aea22SJiri Olsa } while (0) 1829945aea22SJiri Olsa 18302690c730SNamhyung Kim set_warning_routine(debug_warn); 18312690c730SNamhyung Kim 1832945aea22SJiri Olsa TEST_EVENTS(test__events); 1833945aea22SJiri Olsa 1834945aea22SJiri Olsa if (test_pmu()) 1835945aea22SJiri Olsa TEST_EVENTS(test__events_pmu); 1836945aea22SJiri Olsa 1837945aea22SJiri Olsa if (test_pmu()) { 1838945aea22SJiri Olsa int ret = test_pmu_events(); 1839945aea22SJiri Olsa if (ret) 1840945aea22SJiri Olsa return ret; 1841945aea22SJiri Olsa } 1842945aea22SJiri Olsa 1843945aea22SJiri Olsa ret1 = test_terms(test__terms, ARRAY_SIZE(test__terms)); 1844945aea22SJiri Olsa if (!ret2) 1845945aea22SJiri Olsa ret2 = ret1; 1846945aea22SJiri Olsa 1847945aea22SJiri Olsa return ret2; 1848945aea22SJiri Olsa } 1849