1e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 2e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include "parse-events.h" 3e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include "evsel.h" 4e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include "evlist.h" 5e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include "sysfs.h" 6e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include <lk/debugfs.h> 7e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include "tests.h" 8e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include <linux/hw_breakpoint.h> 9e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 10e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_TP_SAMPLE_TYPE (PERF_SAMPLE_RAW | PERF_SAMPLE_TIME | \ 11e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_SAMPLE_CPU | PERF_SAMPLE_PERIOD) 12e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 13e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_tracepoint(struct perf_evlist *evlist) 14e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 15e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel = perf_evlist__first(evlist); 16e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 17e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 18e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong number of groups", 0 == evlist->nr_groups); 19e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->attr.type); 20e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong sample_type", 21e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_TP_SAMPLE_TYPE == evsel->attr.sample_type); 22e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->attr.sample_period); 23e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return 0; 24e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 25e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 26e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_tracepoint_multi(struct perf_evlist *evlist) 27e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 28e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel; 29e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 30e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong number of entries", evlist->nr_entries > 1); 31e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong number of groups", 0 == evlist->nr_groups); 32e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 33e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng list_for_each_entry(evsel, &evlist->entries, node) { 34e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", 35e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_TYPE_TRACEPOINT == evsel->attr.type); 36e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong sample_type", 37e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_TP_SAMPLE_TYPE == evsel->attr.sample_type); 38e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong sample_period", 39e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1 == evsel->attr.sample_period); 40e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 41e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return 0; 42e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 43e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 44e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_raw(struct perf_evlist *evlist) 45e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 46e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel = perf_evlist__first(evlist); 47e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 48e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 49e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); 50e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 0x1a == evsel->attr.config); 51e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return 0; 52e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 53e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 54e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_numeric(struct perf_evlist *evlist) 55e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 56e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel = perf_evlist__first(evlist); 57e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 58e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 59e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", 1 == evsel->attr.type); 60e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config); 61e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return 0; 62e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 63e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 64e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_symbolic_name(struct perf_evlist *evlist) 65e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 66e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel = perf_evlist__first(evlist); 67e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 68e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 69e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 70e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 71e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); 72e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return 0; 73e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 74e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 75e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_symbolic_name_config(struct perf_evlist *evlist) 76e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 77e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel = perf_evlist__first(evlist); 78e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 79e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 80e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 81e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 82e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 83e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong period", 84e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 100000 == evsel->attr.sample_period); 85e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config1", 86e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 0 == evsel->attr.config1); 87e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config2", 88e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1 == evsel->attr.config2); 89e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return 0; 90e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 91e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 92e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_symbolic_alias(struct perf_evlist *evlist) 93e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 94e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel = perf_evlist__first(evlist); 95e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 96e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 97e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->attr.type); 98e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 99e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_SW_PAGE_FAULTS == evsel->attr.config); 100e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return 0; 101e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 102e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 103e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_genhw(struct perf_evlist *evlist) 104e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 105e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel = perf_evlist__first(evlist); 106e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 107e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 108e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_HW_CACHE == evsel->attr.type); 109e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", (1 << 16) == evsel->attr.config); 110e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return 0; 111e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 112e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 113e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_breakpoint(struct perf_evlist *evlist) 114e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 115e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel = perf_evlist__first(evlist); 116e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 117e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 118e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->attr.type); 119e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config); 120e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) == 121e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng evsel->attr.bp_type); 122e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_4 == 123e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng evsel->attr.bp_len); 124e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return 0; 125e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 126e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 127e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_breakpoint_x(struct perf_evlist *evlist) 128e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 129e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel = perf_evlist__first(evlist); 130e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 131e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 132e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->attr.type); 133e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config); 134e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong bp_type", 135e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng HW_BREAKPOINT_X == evsel->attr.bp_type); 136e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong bp_len", sizeof(long) == evsel->attr.bp_len); 137e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return 0; 138e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 139e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 140e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_breakpoint_r(struct perf_evlist *evlist) 141e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 142e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel = perf_evlist__first(evlist); 143e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 144e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 145e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", 146e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_TYPE_BREAKPOINT == evsel->attr.type); 147e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config); 148e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong bp_type", 149e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng HW_BREAKPOINT_R == evsel->attr.bp_type); 150e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong bp_len", 151e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng HW_BREAKPOINT_LEN_4 == evsel->attr.bp_len); 152e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return 0; 153e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 154e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 155e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_breakpoint_w(struct perf_evlist *evlist) 156e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 157e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel = perf_evlist__first(evlist); 158e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 159e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 160e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", 161e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_TYPE_BREAKPOINT == evsel->attr.type); 162e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config); 163e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong bp_type", 164e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng HW_BREAKPOINT_W == evsel->attr.bp_type); 165e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong bp_len", 166e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng HW_BREAKPOINT_LEN_4 == evsel->attr.bp_len); 167e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return 0; 168e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 169e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 170e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_breakpoint_rw(struct perf_evlist *evlist) 171e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 172e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel = perf_evlist__first(evlist); 173e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 174e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 175e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", 176e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_TYPE_BREAKPOINT == evsel->attr.type); 177e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config); 178e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong bp_type", 179e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng (HW_BREAKPOINT_R|HW_BREAKPOINT_W) == evsel->attr.bp_type); 180e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong bp_len", 181e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng HW_BREAKPOINT_LEN_4 == evsel->attr.bp_len); 182e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return 0; 183e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 184e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 185e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_tracepoint_modifier(struct perf_evlist *evlist) 186e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 187e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel = perf_evlist__first(evlist); 188e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 189e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 190e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 191e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 192e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 193e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 194e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return test__checkevent_tracepoint(evlist); 195e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 196e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 197e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int 198e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengtest__checkevent_tracepoint_multi_modifier(struct perf_evlist *evlist) 199e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 200e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel; 201e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 202e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong number of entries", evlist->nr_entries > 1); 203e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 204e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng list_for_each_entry(evsel, &evlist->entries, node) { 205e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", 206e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng !evsel->attr.exclude_user); 207e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", 208e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng evsel->attr.exclude_kernel); 209e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 210e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 211e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 212e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 213e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return test__checkevent_tracepoint_multi(evlist); 214e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 215e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 216e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_raw_modifier(struct perf_evlist *evlist) 217e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 218e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel = perf_evlist__first(evlist); 219e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 220e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 221e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 222e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 223e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 224e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 225e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return test__checkevent_raw(evlist); 226e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 227e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 228e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_numeric_modifier(struct perf_evlist *evlist) 229e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 230e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel = perf_evlist__first(evlist); 231e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 232e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 233e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 234e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 235e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 236e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 237e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return test__checkevent_numeric(evlist); 238e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 239e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 240e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_symbolic_name_modifier(struct perf_evlist *evlist) 241e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 242e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel = perf_evlist__first(evlist); 243e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 244e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 245e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 246e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 247e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 248e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 249e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return test__checkevent_symbolic_name(evlist); 250e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 251e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 252e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_exclude_host_modifier(struct perf_evlist *evlist) 253e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 254e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel = perf_evlist__first(evlist); 255e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 256e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 257e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 258e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 259e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return test__checkevent_symbolic_name(evlist); 260e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 261e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 262e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_exclude_guest_modifier(struct perf_evlist *evlist) 263e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 264e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel = perf_evlist__first(evlist); 265e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 266e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 267e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 268e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 269e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return test__checkevent_symbolic_name(evlist); 270e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 271e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 272e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_symbolic_alias_modifier(struct perf_evlist *evlist) 273e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 274e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel = perf_evlist__first(evlist); 275e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 276e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 277e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 278e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 279e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 280e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 281e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return test__checkevent_symbolic_alias(evlist); 282e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 283e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 284e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_genhw_modifier(struct perf_evlist *evlist) 285e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 286e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel = perf_evlist__first(evlist); 287e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 288e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 289e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 290e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 291e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 292e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 293e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return test__checkevent_genhw(evlist); 294e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 295e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 296e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_breakpoint_modifier(struct perf_evlist *evlist) 297e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 298e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel = perf_evlist__first(evlist); 299e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 300e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 301e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 302e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 303e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 304e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 305e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong name", 306e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng !strcmp(perf_evsel__name(evsel), "mem:0:u")); 307e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 308e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return test__checkevent_breakpoint(evlist); 309e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 310e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 311e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_breakpoint_x_modifier(struct perf_evlist *evlist) 312e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 313e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel = perf_evlist__first(evlist); 314e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 315e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 316e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 317e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 318e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 319e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong name", 320e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng !strcmp(perf_evsel__name(evsel), "mem:0:x:k")); 321e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 322e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return test__checkevent_breakpoint_x(evlist); 323e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 324e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 325e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_breakpoint_r_modifier(struct perf_evlist *evlist) 326e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 327e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel = perf_evlist__first(evlist); 328e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 329e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 330e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 331e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 332e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 333e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong name", 334e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng !strcmp(perf_evsel__name(evsel), "mem:0:r:hp")); 335e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 336e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return test__checkevent_breakpoint_r(evlist); 337e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 338e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 339e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_breakpoint_w_modifier(struct perf_evlist *evlist) 340e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 341e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel = perf_evlist__first(evlist); 342e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 343e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 344e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 345e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 346e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 347e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong name", 348e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng !strcmp(perf_evsel__name(evsel), "mem:0:w:up")); 349e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 350e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return test__checkevent_breakpoint_w(evlist); 351e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 352e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 353e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_breakpoint_rw_modifier(struct perf_evlist *evlist) 354e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 355e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel = perf_evlist__first(evlist); 356e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 357e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 358e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 359e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 360e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 361e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong name", 362e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng !strcmp(perf_evsel__name(evsel), "mem:0:rw:kp")); 363e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 364e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return test__checkevent_breakpoint_rw(evlist); 365e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 366e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 367e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_pmu(struct perf_evlist *evlist) 368e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 369e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 370e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel = perf_evlist__first(evlist); 371e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 372e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 373e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); 374e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 10 == evsel->attr.config); 375e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config1", 1 == evsel->attr.config1); 376e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config2", 3 == evsel->attr.config2); 377e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong period", 1000 == evsel->attr.sample_period); 378e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 379e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return 0; 380e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 381e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 382e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_list(struct perf_evlist *evlist) 383e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 384e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel = perf_evlist__first(evlist); 385e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 386e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->nr_entries); 387e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 388e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* r1 */ 389e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); 390e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config); 391e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config1", 0 == evsel->attr.config1); 392e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config2", 0 == evsel->attr.config2); 393e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 394e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 395e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 396e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 397e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 398e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* syscalls:sys_enter_open:k */ 399e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng evsel = perf_evsel__next(evsel); 400e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->attr.type); 401e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong sample_type", 402e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_TP_SAMPLE_TYPE == evsel->attr.sample_type); 403e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->attr.sample_period); 404e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 405e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 406e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 407e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 408e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 409e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* 1:1:hp */ 410e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng evsel = perf_evsel__next(evsel); 411e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", 1 == evsel->attr.type); 412e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config); 413e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 414e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 415e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 416e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 417e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 418e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return 0; 419e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 420e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 421e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_pmu_name(struct perf_evlist *evlist) 422e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 423e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel = perf_evlist__first(evlist); 424e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 425e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* cpu/config=1,name=krava/u */ 426e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); 427e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); 428e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config); 429e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong name", !strcmp(perf_evsel__name(evsel), "krava")); 430e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 431e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* cpu/config=2/u" */ 432e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng evsel = perf_evsel__next(evsel); 433e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); 434e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); 435e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 2 == evsel->attr.config); 436e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong name", 437e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng !strcmp(perf_evsel__name(evsel), "cpu/config=2/u")); 438e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 439e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return 0; 440e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 441e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 442e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_pmu_events(struct perf_evlist *evlist) 443e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 444e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel; 445e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 446e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng evsel = list_entry(evlist->entries.next, struct perf_evsel, node); 447e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); 448e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); 449e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", 450e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng !evsel->attr.exclude_user); 451e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", 452e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng evsel->attr.exclude_kernel); 453e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 454e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 455e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong pinned", !evsel->attr.pinned); 456e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 457e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return 0; 458e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 459e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 460e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkterms_simple(struct list_head *terms) 461e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 462e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct parse_events_term *term; 463e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 464e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* config=10 */ 465e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng term = list_entry(terms->next, struct parse_events_term, list); 466e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type term", 467e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG); 468e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type val", 469e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 470e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong val", term->val.num == 10); 471e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", !term->config); 472e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 473e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* config1 */ 474e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng term = list_entry(term->list.next, struct parse_events_term, list); 475e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type term", 476e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG1); 477e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type val", 478e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 479e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong val", term->val.num == 1); 480e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", !term->config); 481e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 482e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* config2=3 */ 483e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng term = list_entry(term->list.next, struct parse_events_term, list); 484e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type term", 485e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG2); 486e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type val", 487e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 488e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong val", term->val.num == 3); 489e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", !term->config); 490e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 491e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* umask=1*/ 492e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng term = list_entry(term->list.next, struct parse_events_term, list); 493e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type term", 494e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng term->type_term == PARSE_EVENTS__TERM_TYPE_USER); 495e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type val", 496e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 497e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong val", term->val.num == 1); 498e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "umask")); 499e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 500e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return 0; 501e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 502e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 503e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__group1(struct perf_evlist *evlist) 504e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 505e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel, *leader; 506e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 507e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); 508e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 509e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 510e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* instructions:k */ 511e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng evsel = leader = perf_evlist__first(evlist); 512e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 513e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 514e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); 515e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 516e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 517e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 518e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 519e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 520e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 521e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 522e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); 523e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 524e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 525e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 526e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* cycles:upp */ 527e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng evsel = perf_evsel__next(evsel); 528e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 529e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 530e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 531e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 532e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 533e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 534e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* use of precise requires exclude_guest */ 535e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 536e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 537e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 2); 538e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 539e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 540e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 541e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 542e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return 0; 543e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 544e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 545e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__group2(struct perf_evlist *evlist) 546e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 547e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel, *leader; 548e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 549e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->nr_entries); 550e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 551e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 552e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* faults + :ku modifier */ 553e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng evsel = leader = perf_evlist__first(evlist); 554e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->attr.type); 555e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 556e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_SW_PAGE_FAULTS == evsel->attr.config); 557e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 558e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 559e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 560e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 561e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 562e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 563e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 564e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); 565e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 566e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 567e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 568e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* cache-references + :u modifier */ 569e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng evsel = perf_evsel__next(evsel); 570e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 571e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 572e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_CACHE_REFERENCES == evsel->attr.config); 573e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 574e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 575e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 576e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 577e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 578e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 579e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 580e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 581e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 582e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 583e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* cycles:k */ 584e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng evsel = perf_evsel__next(evsel); 585e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 586e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 587e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 588e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 589e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 590e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 591e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 592e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 593e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 594e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 595e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 596e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 597e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return 0; 598e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 599e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 600e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__group3(struct perf_evlist *evlist __maybe_unused) 601e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 602e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel, *leader; 603e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 604e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->nr_entries); 605e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong number of groups", 2 == evlist->nr_groups); 606e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 607e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* group1 syscalls:sys_enter_open:H */ 608e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng evsel = leader = perf_evlist__first(evlist); 609e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->attr.type); 610e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong sample_type", 611e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_TP_SAMPLE_TYPE == evsel->attr.sample_type); 612e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->attr.sample_period); 613e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 614e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 615e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 616e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 617e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 618e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 619e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 620e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong group name", 621e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng !strcmp(leader->group_name, "group1")); 622e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); 623e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 624e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 625e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 626e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* group1 cycles:kppp */ 627e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng evsel = perf_evsel__next(evsel); 628e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 629e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 630e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 631e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 632e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 633e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 634e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* use of precise requires exclude_guest */ 635e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 636e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 637e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 3); 638e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 639e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 640e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 641e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 642e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 643e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* group2 cycles + G modifier */ 644e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng evsel = leader = perf_evsel__next(evsel); 645e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 646e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 647e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 648e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 649e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 650e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 651e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 652e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 653e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 654e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 655e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong group name", 656e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng !strcmp(leader->group_name, "group2")); 657e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); 658e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 659e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 660e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 661e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* group2 1:3 + G modifier */ 662e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng evsel = perf_evsel__next(evsel); 663e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", 1 == evsel->attr.type); 664e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 3 == evsel->attr.config); 665e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 666e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 667e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 668e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 669e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 670e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 671e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 672e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 673e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 674e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 675e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* instructions:u */ 676e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng evsel = perf_evsel__next(evsel); 677e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 678e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 679e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); 680e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 681e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 682e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 683e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 684e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 685e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 686e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 687e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 688e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 689e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return 0; 690e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 691e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 692e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__group4(struct perf_evlist *evlist __maybe_unused) 693e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 694e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel, *leader; 695e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 696e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); 697e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 698e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 699e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* cycles:u + p */ 700e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng evsel = leader = perf_evlist__first(evlist); 701e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 702e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 703e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 704e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 705e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 706e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 707e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* use of precise requires exclude_guest */ 708e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 709e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 710e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 1); 711e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 712e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 713e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); 714e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 715e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 716e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 717e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* instructions:kp + p */ 718e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng evsel = perf_evsel__next(evsel); 719e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 720e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 721e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); 722e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 723e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 724e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 725e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* use of precise requires exclude_guest */ 726e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 727e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 728e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 2); 729e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 730e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 731e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 732e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 733e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return 0; 734e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 735e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 736e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__group5(struct perf_evlist *evlist __maybe_unused) 737e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 738e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel, *leader; 739e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 740e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->nr_entries); 741e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong number of groups", 2 == evlist->nr_groups); 742e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 743e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* cycles + G */ 744e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng evsel = leader = perf_evlist__first(evlist); 745e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 746e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 747e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 748e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 749e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 750e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 751e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 752e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 753e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 754e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 755e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 756e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); 757e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 758e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 759e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 760e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* instructions + G */ 761e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng evsel = perf_evsel__next(evsel); 762e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 763e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 764e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); 765e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 766e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 767e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 768e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 769e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 770e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 771e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 772e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 773e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 774e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 775e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* cycles:G */ 776e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng evsel = leader = perf_evsel__next(evsel); 777e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 778e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 779e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 780e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 781e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 782e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 783e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 784e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 785e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 786e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 787e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 788e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); 789e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 790e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 791e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 792e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* instructions:G */ 793e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng evsel = perf_evsel__next(evsel); 794e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 795e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 796e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); 797e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 798e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 799e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 800e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 801e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 802e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 803e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 804e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 805e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 806e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* cycles */ 807e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng evsel = perf_evsel__next(evsel); 808e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 809e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 810e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 811e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 812e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 813e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 814e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 815e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 816e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 817e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 818e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 819e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return 0; 820e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 821e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 822e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__group_gh1(struct perf_evlist *evlist) 823e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 824e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel, *leader; 825e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 826e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); 827e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 828e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 829e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* cycles + :H group modifier */ 830e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng evsel = leader = perf_evlist__first(evlist); 831e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 832e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 833e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 834e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 835e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 836e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 837e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 838e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 839e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 840e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 841e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 842e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); 843e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 844e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 845e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* cache-misses:G + :H group modifier */ 846e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng evsel = perf_evsel__next(evsel); 847e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 848e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 849e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_CACHE_MISSES == evsel->attr.config); 850e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 851e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 852e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 853e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 854e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 855e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 856e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 857e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 858e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 859e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return 0; 860e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 861e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 862e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__group_gh2(struct perf_evlist *evlist) 863e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 864e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel, *leader; 865e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 866e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); 867e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 868e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 869e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* cycles + :G group modifier */ 870e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng evsel = leader = perf_evlist__first(evlist); 871e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 872e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 873e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 874e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 875e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 876e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 877e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 878e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 879e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 880e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 881e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 882e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); 883e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 884e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 885e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* cache-misses:H + :G group modifier */ 886e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng evsel = perf_evsel__next(evsel); 887e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 888e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 889e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_CACHE_MISSES == evsel->attr.config); 890e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 891e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 892e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 893e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 894e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 895e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 896e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 897e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 898e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 899e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return 0; 900e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 901e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 902e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__group_gh3(struct perf_evlist *evlist) 903e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 904e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel, *leader; 905e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 906e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); 907e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 908e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 909e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* cycles:G + :u group modifier */ 910e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng evsel = leader = perf_evlist__first(evlist); 911e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 912e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 913e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 914e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 915e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 916e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 917e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 918e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 919e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 920e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 921e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 922e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); 923e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 924e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 925e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* cache-misses:H + :u group modifier */ 926e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng evsel = perf_evsel__next(evsel); 927e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 928e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 929e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_CACHE_MISSES == evsel->attr.config); 930e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 931e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 932e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 933e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 934e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 935e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 936e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 937e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 938e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 939e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return 0; 940e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 941e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 942e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__group_gh4(struct perf_evlist *evlist) 943e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 944e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel, *leader; 945e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 946e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); 947e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 948e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 949e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* cycles:G + :uG group modifier */ 950e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng evsel = leader = perf_evlist__first(evlist); 951e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 952e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 953e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 954e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 955e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 956e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 957e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 958e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 959e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 960e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 961e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 962e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); 963e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 964e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 965e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* cache-misses:H + :uG group modifier */ 966e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng evsel = perf_evsel__next(evsel); 967e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 968e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 969e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_CACHE_MISSES == evsel->attr.config); 970e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 971e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 972e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 973e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 974e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 975e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 976e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 977e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 978e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 979e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return 0; 980e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 981e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 982e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__leader_sample1(struct perf_evlist *evlist) 983e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 984e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel, *leader; 985e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 986e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->nr_entries); 987e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 988e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* cycles - sampling group leader */ 989e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng evsel = leader = perf_evlist__first(evlist); 990e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 991e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 992e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 993e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 994e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 995e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 996e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 997e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 998e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 999e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1000e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 1001e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1002e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1003e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* cache-misses - not sampling */ 1004e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng evsel = perf_evsel__next(evsel); 1005e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 1006e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 1007e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_CACHE_MISSES == evsel->attr.config); 1008e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 1009e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 1010e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 1011e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 1012e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 1013e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 1014e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 1015e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1016e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1017e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* branch-misses - not sampling */ 1018e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng evsel = perf_evsel__next(evsel); 1019e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 1020e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 1021e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_BRANCH_MISSES == evsel->attr.config); 1022e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 1023e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 1024e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 1025e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 1026e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 1027e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 1028e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1029e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 1030e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1031e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1032e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return 0; 1033e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 1034e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1035e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__leader_sample2(struct perf_evlist *evlist __maybe_unused) 1036e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 1037e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel, *leader; 1038e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1039e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); 1040e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1041e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* instructions - sampling group leader */ 1042e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng evsel = leader = perf_evlist__first(evlist); 1043e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 1044e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 1045e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); 1046e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 1047e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 1048e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 1049e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 1050e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 1051e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 1052e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1053e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 1054e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1055e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1056e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* branch-misses - not sampling */ 1057e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng evsel = perf_evsel__next(evsel); 1058e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 1059e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 1060e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_BRANCH_MISSES == evsel->attr.config); 1061e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 1062e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 1063e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 1064e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 1065e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 1066e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 1067e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1068e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 1069e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1070e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1071e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return 0; 1072e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 1073e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1074e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__checkevent_pinned_modifier(struct perf_evlist *evlist) 1075e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 1076e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel = perf_evlist__first(evlist); 1077e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1078e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 1079e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 1080e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 1081e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 1082e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong pinned", evsel->attr.pinned); 1083e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1084e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return test__checkevent_symbolic_name(evlist); 1085e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 1086e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1087e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__pinned_group(struct perf_evlist *evlist) 1088e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 1089e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evsel *evsel, *leader; 1090e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1091e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->nr_entries); 1092e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1093e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* cycles - group leader */ 1094e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng evsel = leader = perf_evlist__first(evlist); 1095e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 1096e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 1097e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); 1098e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1099e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 1100e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong pinned", evsel->attr.pinned); 1101e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1102e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* cache-misses - can not be pinned, but will go on with the leader */ 1103e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng evsel = perf_evsel__next(evsel); 1104e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 1105e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 1106e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_CACHE_MISSES == evsel->attr.config); 1107e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong pinned", !evsel->attr.pinned); 1108e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1109e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* branch-misses - ditto */ 1110e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng evsel = perf_evsel__next(evsel); 1111e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong config", 1112e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_BRANCH_MISSES == evsel->attr.config); 1113e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong pinned", !evsel->attr.pinned); 1114e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1115e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return 0; 1116e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 1117e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1118e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int count_tracepoints(void) 1119e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 1120e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng char events_path[PATH_MAX]; 1121e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct dirent *events_ent; 1122e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng DIR *events_dir; 1123e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng int cnt = 0; 1124e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1125e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng scnprintf(events_path, PATH_MAX, "%s/tracing/events", 1126e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng debugfs_find_mountpoint()); 1127e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1128e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng events_dir = opendir(events_path); 1129e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1130e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("Can't open events dir", events_dir); 1131e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1132e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng while ((events_ent = readdir(events_dir))) { 1133e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng char sys_path[PATH_MAX]; 1134e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct dirent *sys_ent; 1135e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng DIR *sys_dir; 1136e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1137e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if (!strcmp(events_ent->d_name, ".") 1138e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng || !strcmp(events_ent->d_name, "..") 1139e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng || !strcmp(events_ent->d_name, "enable") 1140e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng || !strcmp(events_ent->d_name, "header_event") 1141e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng || !strcmp(events_ent->d_name, "header_page")) 1142e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng continue; 1143e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1144e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng scnprintf(sys_path, PATH_MAX, "%s/%s", 1145e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng events_path, events_ent->d_name); 1146e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1147e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng sys_dir = opendir(sys_path); 1148e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("Can't open sys dir", sys_dir); 1149e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1150e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng while ((sys_ent = readdir(sys_dir))) { 1151e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if (!strcmp(sys_ent->d_name, ".") 1152e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng || !strcmp(sys_ent->d_name, "..") 1153e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng || !strcmp(sys_ent->d_name, "enable") 1154e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng || !strcmp(sys_ent->d_name, "filter")) 1155e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng continue; 1156e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1157e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng cnt++; 1158e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 1159e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1160e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng closedir(sys_dir); 1161e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 1162e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1163e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng closedir(events_dir); 1164e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return cnt; 1165e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 1166e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1167e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test__all_tracepoints(struct perf_evlist *evlist) 1168e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 1169e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_ASSERT_VAL("wrong events count", 1170e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng count_tracepoints() == evlist->nr_entries); 1171e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1172e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return test__checkevent_tracepoint_multi(evlist); 1173e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 1174e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1175e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct evlist_test { 1176e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng const char *name; 1177e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u32 type; 1178e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng int (*check)(struct perf_evlist *evlist); 1179e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}; 1180e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1181e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic struct evlist_test test__events[] = { 1182e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [0] = { 1183e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "syscalls:sys_enter_open", 1184e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__checkevent_tracepoint, 1185e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1186e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [1] = { 1187e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "syscalls:*", 1188e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__checkevent_tracepoint_multi, 1189e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1190e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [2] = { 1191e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "r1a", 1192e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__checkevent_raw, 1193e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1194e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [3] = { 1195e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "1:1", 1196e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__checkevent_numeric, 1197e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1198e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [4] = { 1199e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "instructions", 1200e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__checkevent_symbolic_name, 1201e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1202e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [5] = { 1203e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "cycles/period=100000,config2/", 1204e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__checkevent_symbolic_name_config, 1205e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1206e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [6] = { 1207e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "faults", 1208e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__checkevent_symbolic_alias, 1209e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1210e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [7] = { 1211e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "L1-dcache-load-miss", 1212e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__checkevent_genhw, 1213e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1214e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [8] = { 1215e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "mem:0", 1216e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__checkevent_breakpoint, 1217e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1218e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [9] = { 1219e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "mem:0:x", 1220e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__checkevent_breakpoint_x, 1221e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1222e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [10] = { 1223e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "mem:0:r", 1224e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__checkevent_breakpoint_r, 1225e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1226e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [11] = { 1227e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "mem:0:w", 1228e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__checkevent_breakpoint_w, 1229e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1230e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [12] = { 1231e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "syscalls:sys_enter_open:k", 1232e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__checkevent_tracepoint_modifier, 1233e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1234e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [13] = { 1235e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "syscalls:*:u", 1236e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__checkevent_tracepoint_multi_modifier, 1237e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1238e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [14] = { 1239e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "r1a:kp", 1240e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__checkevent_raw_modifier, 1241e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1242e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [15] = { 1243e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "1:1:hp", 1244e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__checkevent_numeric_modifier, 1245e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1246e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [16] = { 1247e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "instructions:h", 1248e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__checkevent_symbolic_name_modifier, 1249e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1250e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [17] = { 1251e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "faults:u", 1252e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__checkevent_symbolic_alias_modifier, 1253e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1254e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [18] = { 1255e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "L1-dcache-load-miss:kp", 1256e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__checkevent_genhw_modifier, 1257e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1258e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [19] = { 1259e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "mem:0:u", 1260e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__checkevent_breakpoint_modifier, 1261e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1262e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [20] = { 1263e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "mem:0:x:k", 1264e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__checkevent_breakpoint_x_modifier, 1265e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1266e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [21] = { 1267e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "mem:0:r:hp", 1268e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__checkevent_breakpoint_r_modifier, 1269e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1270e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [22] = { 1271e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "mem:0:w:up", 1272e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__checkevent_breakpoint_w_modifier, 1273e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1274e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [23] = { 1275e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "r1,syscalls:sys_enter_open:k,1:1:hp", 1276e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__checkevent_list, 1277e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1278e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [24] = { 1279e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "instructions:G", 1280e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__checkevent_exclude_host_modifier, 1281e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1282e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [25] = { 1283e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "instructions:H", 1284e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__checkevent_exclude_guest_modifier, 1285e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1286e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [26] = { 1287e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "mem:0:rw", 1288e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__checkevent_breakpoint_rw, 1289e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1290e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [27] = { 1291e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "mem:0:rw:kp", 1292e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__checkevent_breakpoint_rw_modifier, 1293e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1294e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [28] = { 1295e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "{instructions:k,cycles:upp}", 1296e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__group1, 1297e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1298e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [29] = { 1299e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "{faults:k,cache-references}:u,cycles:k", 1300e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__group2, 1301e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1302e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [30] = { 1303e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "group1{syscalls:sys_enter_open:H,cycles:kppp},group2{cycles,1:3}:G,instructions:u", 1304e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__group3, 1305e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1306e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [31] = { 1307e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "{cycles:u,instructions:kp}:p", 1308e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__group4, 1309e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1310e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [32] = { 1311e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "{cycles,instructions}:G,{cycles:G,instructions:G},cycles", 1312e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__group5, 1313e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1314e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [33] = { 1315e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "*:*", 1316e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__all_tracepoints, 1317e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1318e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [34] = { 1319e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "{cycles,cache-misses:G}:H", 1320e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__group_gh1, 1321e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1322e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [35] = { 1323e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "{cycles,cache-misses:H}:G", 1324e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__group_gh2, 1325e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1326e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [36] = { 1327e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "{cycles:G,cache-misses:H}:u", 1328e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__group_gh3, 1329e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1330e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [37] = { 1331e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "{cycles:G,cache-misses:H}:uG", 1332e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__group_gh4, 1333e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1334e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [38] = { 1335e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "{cycles,cache-misses,branch-misses}:S", 1336e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__leader_sample1, 1337e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1338e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [39] = { 1339e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "{instructions,branch-misses}:Su", 1340e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__leader_sample2, 1341e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1342e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [40] = { 1343e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "instructions:uDp", 1344e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__checkevent_pinned_modifier, 1345e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1346e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [41] = { 1347e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "{cycles,cache-misses,branch-misses}:D", 1348e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__pinned_group, 1349e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1350e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}; 1351e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1352e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic struct evlist_test test__events_pmu[] = { 1353e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [0] = { 1354e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "cpu/config=10,config1,config2=3,period=1000/u", 1355e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__checkevent_pmu, 1356e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1357e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [1] = { 1358e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .name = "cpu/config=1,name=krava/u,cpu/config=2/u", 1359e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__checkevent_pmu_name, 1360e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1361e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}; 1362e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1363e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct terms_test { 1364e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng const char *str; 1365e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u32 type; 1366e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng int (*check)(struct list_head *terms); 1367e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}; 1368e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1369e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic struct terms_test test__terms[] = { 1370e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng [0] = { 1371e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .str = "config=10,config1,config2=3,umask=1", 1372e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .check = test__checkterms_simple, 1373e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }, 1374e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}; 1375e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1376e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test_event(struct evlist_test *e) 1377e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 1378e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct perf_evlist *evlist; 1379e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng int ret; 1380e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1381e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng evlist = perf_evlist__new(); 1382e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if (evlist == NULL) 1383e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return -ENOMEM; 1384e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1385e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ret = parse_events(evlist, e->name); 1386e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if (ret) { 1387e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng pr_debug("failed to parse event '%s', err %d\n", 1388e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng e->name, ret); 1389e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return ret; 1390e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 1391e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1392e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ret = e->check(evlist); 1393e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng perf_evlist__delete(evlist); 1394e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1395e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return ret; 1396e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 1397e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1398e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test_events(struct evlist_test *events, unsigned cnt) 1399e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 1400e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng int ret1, ret2 = 0; 1401e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng unsigned i; 1402e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1403e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng for (i = 0; i < cnt; i++) { 1404e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct evlist_test *e = &events[i]; 1405e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1406e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng pr_debug("running test %d '%s'\n", i, e->name); 1407e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ret1 = test_event(e); 1408e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if (ret1) 1409e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ret2 = ret1; 1410e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 1411e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1412e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return ret2; 1413e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 1414e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1415e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test_term(struct terms_test *t) 1416e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 1417e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct list_head terms; 1418e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng int ret; 1419e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1420e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng INIT_LIST_HEAD(&terms); 1421e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1422e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ret = parse_events_terms(&terms, t->str); 1423e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if (ret) { 1424e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng pr_debug("failed to parse terms '%s', err %d\n", 1425e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng t->str , ret); 1426e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return ret; 1427e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 1428e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1429e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ret = t->check(&terms); 1430e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng parse_events__free_terms(&terms); 1431e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1432e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return ret; 1433e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 1434e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1435e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test_terms(struct terms_test *terms, unsigned cnt) 1436e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 1437e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng int ret = 0; 1438e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng unsigned i; 1439e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1440e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng for (i = 0; i < cnt; i++) { 1441e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct terms_test *t = &terms[i]; 1442e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1443e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng pr_debug("running test %d '%s'\n", i, t->str); 1444e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ret = test_term(t); 1445e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if (ret) 1446e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng break; 1447e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 1448e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1449e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return ret; 1450e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 1451e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1452e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test_pmu(void) 1453e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 1454e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct stat st; 1455e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng char path[PATH_MAX]; 1456e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng int ret; 1457e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1458e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/format/", 1459e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng sysfs_find_mountpoint()); 1460e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1461e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ret = stat(path, &st); 1462e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if (ret) 1463e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng pr_debug("omitting PMU cpu tests\n"); 1464e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return !ret; 1465e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 1466e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1467e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic int test_pmu_events(void) 1468e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 1469e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct stat st; 1470e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng char path[PATH_MAX]; 1471e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct dirent *ent; 1472e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng DIR *dir; 1473e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng int ret; 1474e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1475e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/events/", 1476e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng sysfs_find_mountpoint()); 1477e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1478e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ret = stat(path, &st); 1479e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if (ret) { 1480e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng pr_debug("omitting PMU cpu events tests\n"); 1481e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return 0; 1482e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 1483e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1484e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng dir = opendir(path); 1485e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if (!dir) { 1486e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng pr_debug("can't open pmu event dir"); 1487e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return -1; 1488e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 1489e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1490e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng while (!ret && (ent = readdir(dir))) { 1491e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define MAX_NAME 100 1492e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct evlist_test e; 1493e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng char name[MAX_NAME]; 1494e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1495e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if (!strcmp(ent->d_name, ".") || 1496e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng !strcmp(ent->d_name, "..")) 1497e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng continue; 1498e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1499e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng snprintf(name, MAX_NAME, "cpu/event=%s/u", ent->d_name); 1500e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1501e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng e.name = name; 1502e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng e.check = test__checkevent_pmu_events; 1503e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1504e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ret = test_event(&e); 1505e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#undef MAX_NAME 1506e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 1507e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1508e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng closedir(dir); 1509e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return ret; 1510e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 1511e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1512e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint test__parse_events(void) 1513e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 1514e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng int ret1, ret2 = 0; 1515e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1516e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define TEST_EVENTS(tests) \ 1517e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengdo { \ 1518e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ret1 = test_events(tests, ARRAY_SIZE(tests)); \ 1519e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if (!ret2) \ 1520e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ret2 = ret1; \ 1521e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} while (0) 1522e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1523e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_EVENTS(test__events); 1524e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1525e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if (test_pmu()) 1526e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng TEST_EVENTS(test__events_pmu); 1527e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1528e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if (test_pmu()) { 1529e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng int ret = test_pmu_events(); 1530e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if (ret) 1531e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return ret; 1532e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 1533e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1534e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ret1 = test_terms(test__terms, ARRAY_SIZE(test__terms)); 1535e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if (!ret2) 1536e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ret2 = ret1; 1537e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1538e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return ret2; 1539e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 1540