18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 28c2ecf20Sopenharmony_ci#include "parse-events.h" 38c2ecf20Sopenharmony_ci#include "evsel.h" 48c2ecf20Sopenharmony_ci#include "evlist.h" 58c2ecf20Sopenharmony_ci#include <api/fs/fs.h> 68c2ecf20Sopenharmony_ci#include "tests.h" 78c2ecf20Sopenharmony_ci#include "debug.h" 88c2ecf20Sopenharmony_ci#include "pmu.h" 98c2ecf20Sopenharmony_ci#include <dirent.h> 108c2ecf20Sopenharmony_ci#include <errno.h> 118c2ecf20Sopenharmony_ci#include <sys/types.h> 128c2ecf20Sopenharmony_ci#include <sys/stat.h> 138c2ecf20Sopenharmony_ci#include <unistd.h> 148c2ecf20Sopenharmony_ci#include <linux/kernel.h> 158c2ecf20Sopenharmony_ci#include <linux/hw_breakpoint.h> 168c2ecf20Sopenharmony_ci#include <api/fs/tracing_path.h> 178c2ecf20Sopenharmony_ci 188c2ecf20Sopenharmony_ci#define PERF_TP_SAMPLE_TYPE (PERF_SAMPLE_RAW | PERF_SAMPLE_TIME | \ 198c2ecf20Sopenharmony_ci PERF_SAMPLE_CPU | PERF_SAMPLE_PERIOD) 208c2ecf20Sopenharmony_ci 218c2ecf20Sopenharmony_ci#if defined(__s390x__) 228c2ecf20Sopenharmony_ci/* Return true if kvm module is available and loaded. Test this 238c2ecf20Sopenharmony_ci * and retun success when trace point kvm_s390_create_vm 248c2ecf20Sopenharmony_ci * exists. Otherwise this test always fails. 258c2ecf20Sopenharmony_ci */ 268c2ecf20Sopenharmony_cistatic bool kvm_s390_create_vm_valid(void) 278c2ecf20Sopenharmony_ci{ 288c2ecf20Sopenharmony_ci char *eventfile; 298c2ecf20Sopenharmony_ci bool rc = false; 308c2ecf20Sopenharmony_ci 318c2ecf20Sopenharmony_ci eventfile = get_events_file("kvm-s390"); 328c2ecf20Sopenharmony_ci 338c2ecf20Sopenharmony_ci if (eventfile) { 348c2ecf20Sopenharmony_ci DIR *mydir = opendir(eventfile); 358c2ecf20Sopenharmony_ci 368c2ecf20Sopenharmony_ci if (mydir) { 378c2ecf20Sopenharmony_ci rc = true; 388c2ecf20Sopenharmony_ci closedir(mydir); 398c2ecf20Sopenharmony_ci } 408c2ecf20Sopenharmony_ci put_events_file(eventfile); 418c2ecf20Sopenharmony_ci } 428c2ecf20Sopenharmony_ci 438c2ecf20Sopenharmony_ci return rc; 448c2ecf20Sopenharmony_ci} 458c2ecf20Sopenharmony_ci#endif 468c2ecf20Sopenharmony_ci 478c2ecf20Sopenharmony_cistatic int test__checkevent_tracepoint(struct evlist *evlist) 488c2ecf20Sopenharmony_ci{ 498c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 508c2ecf20Sopenharmony_ci 518c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 528c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of groups", 0 == evlist->nr_groups); 538c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 548c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong sample_type", 558c2ecf20Sopenharmony_ci PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 568c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period); 578c2ecf20Sopenharmony_ci return 0; 588c2ecf20Sopenharmony_ci} 598c2ecf20Sopenharmony_ci 608c2ecf20Sopenharmony_cistatic int test__checkevent_tracepoint_multi(struct evlist *evlist) 618c2ecf20Sopenharmony_ci{ 628c2ecf20Sopenharmony_ci struct evsel *evsel; 638c2ecf20Sopenharmony_ci 648c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of entries", evlist->core.nr_entries > 1); 658c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of groups", 0 == evlist->nr_groups); 668c2ecf20Sopenharmony_ci 678c2ecf20Sopenharmony_ci evlist__for_each_entry(evlist, evsel) { 688c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", 698c2ecf20Sopenharmony_ci PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 708c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong sample_type", 718c2ecf20Sopenharmony_ci PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 728c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong sample_period", 738c2ecf20Sopenharmony_ci 1 == evsel->core.attr.sample_period); 748c2ecf20Sopenharmony_ci } 758c2ecf20Sopenharmony_ci return 0; 768c2ecf20Sopenharmony_ci} 778c2ecf20Sopenharmony_ci 788c2ecf20Sopenharmony_cistatic int test__checkevent_raw(struct evlist *evlist) 798c2ecf20Sopenharmony_ci{ 808c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 818c2ecf20Sopenharmony_ci 828c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 838c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 848c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config); 858c2ecf20Sopenharmony_ci return 0; 868c2ecf20Sopenharmony_ci} 878c2ecf20Sopenharmony_ci 888c2ecf20Sopenharmony_cistatic int test__checkevent_numeric(struct evlist *evlist) 898c2ecf20Sopenharmony_ci{ 908c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 918c2ecf20Sopenharmony_ci 928c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 938c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type); 948c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config); 958c2ecf20Sopenharmony_ci return 0; 968c2ecf20Sopenharmony_ci} 978c2ecf20Sopenharmony_ci 988c2ecf20Sopenharmony_cistatic int test__checkevent_symbolic_name(struct evlist *evlist) 998c2ecf20Sopenharmony_ci{ 1008c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 1018c2ecf20Sopenharmony_ci 1028c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1038c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1048c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 1058c2ecf20Sopenharmony_ci PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 1068c2ecf20Sopenharmony_ci return 0; 1078c2ecf20Sopenharmony_ci} 1088c2ecf20Sopenharmony_ci 1098c2ecf20Sopenharmony_cistatic int test__checkevent_symbolic_name_config(struct evlist *evlist) 1108c2ecf20Sopenharmony_ci{ 1118c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 1128c2ecf20Sopenharmony_ci 1138c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1148c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1158c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 1168c2ecf20Sopenharmony_ci PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 1178c2ecf20Sopenharmony_ci /* 1188c2ecf20Sopenharmony_ci * The period value gets configured within perf_evlist__config, 1198c2ecf20Sopenharmony_ci * while this test executes only parse events method. 1208c2ecf20Sopenharmony_ci */ 1218c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong period", 1228c2ecf20Sopenharmony_ci 0 == evsel->core.attr.sample_period); 1238c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config1", 1248c2ecf20Sopenharmony_ci 0 == evsel->core.attr.config1); 1258c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config2", 1268c2ecf20Sopenharmony_ci 1 == evsel->core.attr.config2); 1278c2ecf20Sopenharmony_ci return 0; 1288c2ecf20Sopenharmony_ci} 1298c2ecf20Sopenharmony_ci 1308c2ecf20Sopenharmony_cistatic int test__checkevent_symbolic_alias(struct evlist *evlist) 1318c2ecf20Sopenharmony_ci{ 1328c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 1338c2ecf20Sopenharmony_ci 1348c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1358c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 1368c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 1378c2ecf20Sopenharmony_ci PERF_COUNT_SW_PAGE_FAULTS == evsel->core.attr.config); 1388c2ecf20Sopenharmony_ci return 0; 1398c2ecf20Sopenharmony_ci} 1408c2ecf20Sopenharmony_ci 1418c2ecf20Sopenharmony_cistatic int test__checkevent_genhw(struct evlist *evlist) 1428c2ecf20Sopenharmony_ci{ 1438c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 1448c2ecf20Sopenharmony_ci 1458c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1468c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_HW_CACHE == evsel->core.attr.type); 1478c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", (1 << 16) == evsel->core.attr.config); 1488c2ecf20Sopenharmony_ci return 0; 1498c2ecf20Sopenharmony_ci} 1508c2ecf20Sopenharmony_ci 1518c2ecf20Sopenharmony_cistatic int test__checkevent_breakpoint(struct evlist *evlist) 1528c2ecf20Sopenharmony_ci{ 1538c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 1548c2ecf20Sopenharmony_ci 1558c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1568c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 1578c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 1588c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) == 1598c2ecf20Sopenharmony_ci evsel->core.attr.bp_type); 1608c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_4 == 1618c2ecf20Sopenharmony_ci evsel->core.attr.bp_len); 1628c2ecf20Sopenharmony_ci return 0; 1638c2ecf20Sopenharmony_ci} 1648c2ecf20Sopenharmony_ci 1658c2ecf20Sopenharmony_cistatic int test__checkevent_breakpoint_x(struct evlist *evlist) 1668c2ecf20Sopenharmony_ci{ 1678c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 1688c2ecf20Sopenharmony_ci 1698c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1708c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 1718c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 1728c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong bp_type", 1738c2ecf20Sopenharmony_ci HW_BREAKPOINT_X == evsel->core.attr.bp_type); 1748c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong bp_len", sizeof(long) == evsel->core.attr.bp_len); 1758c2ecf20Sopenharmony_ci return 0; 1768c2ecf20Sopenharmony_ci} 1778c2ecf20Sopenharmony_ci 1788c2ecf20Sopenharmony_cistatic int test__checkevent_breakpoint_r(struct evlist *evlist) 1798c2ecf20Sopenharmony_ci{ 1808c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 1818c2ecf20Sopenharmony_ci 1828c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1838c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", 1848c2ecf20Sopenharmony_ci PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 1858c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 1868c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong bp_type", 1878c2ecf20Sopenharmony_ci HW_BREAKPOINT_R == evsel->core.attr.bp_type); 1888c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong bp_len", 1898c2ecf20Sopenharmony_ci HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len); 1908c2ecf20Sopenharmony_ci return 0; 1918c2ecf20Sopenharmony_ci} 1928c2ecf20Sopenharmony_ci 1938c2ecf20Sopenharmony_cistatic int test__checkevent_breakpoint_w(struct evlist *evlist) 1948c2ecf20Sopenharmony_ci{ 1958c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 1968c2ecf20Sopenharmony_ci 1978c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1988c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", 1998c2ecf20Sopenharmony_ci PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 2008c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 2018c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong bp_type", 2028c2ecf20Sopenharmony_ci HW_BREAKPOINT_W == evsel->core.attr.bp_type); 2038c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong bp_len", 2048c2ecf20Sopenharmony_ci HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len); 2058c2ecf20Sopenharmony_ci return 0; 2068c2ecf20Sopenharmony_ci} 2078c2ecf20Sopenharmony_ci 2088c2ecf20Sopenharmony_cistatic int test__checkevent_breakpoint_rw(struct evlist *evlist) 2098c2ecf20Sopenharmony_ci{ 2108c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 2118c2ecf20Sopenharmony_ci 2128c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 2138c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", 2148c2ecf20Sopenharmony_ci PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 2158c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 2168c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong bp_type", 2178c2ecf20Sopenharmony_ci (HW_BREAKPOINT_R|HW_BREAKPOINT_W) == evsel->core.attr.bp_type); 2188c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong bp_len", 2198c2ecf20Sopenharmony_ci HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len); 2208c2ecf20Sopenharmony_ci return 0; 2218c2ecf20Sopenharmony_ci} 2228c2ecf20Sopenharmony_ci 2238c2ecf20Sopenharmony_cistatic int test__checkevent_tracepoint_modifier(struct evlist *evlist) 2248c2ecf20Sopenharmony_ci{ 2258c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 2268c2ecf20Sopenharmony_ci 2278c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 2288c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 2298c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 2308c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 2318c2ecf20Sopenharmony_ci 2328c2ecf20Sopenharmony_ci return test__checkevent_tracepoint(evlist); 2338c2ecf20Sopenharmony_ci} 2348c2ecf20Sopenharmony_ci 2358c2ecf20Sopenharmony_cistatic int 2368c2ecf20Sopenharmony_citest__checkevent_tracepoint_multi_modifier(struct evlist *evlist) 2378c2ecf20Sopenharmony_ci{ 2388c2ecf20Sopenharmony_ci struct evsel *evsel; 2398c2ecf20Sopenharmony_ci 2408c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of entries", evlist->core.nr_entries > 1); 2418c2ecf20Sopenharmony_ci 2428c2ecf20Sopenharmony_ci evlist__for_each_entry(evlist, evsel) { 2438c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", 2448c2ecf20Sopenharmony_ci !evsel->core.attr.exclude_user); 2458c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", 2468c2ecf20Sopenharmony_ci evsel->core.attr.exclude_kernel); 2478c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 2488c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 2498c2ecf20Sopenharmony_ci } 2508c2ecf20Sopenharmony_ci 2518c2ecf20Sopenharmony_ci return test__checkevent_tracepoint_multi(evlist); 2528c2ecf20Sopenharmony_ci} 2538c2ecf20Sopenharmony_ci 2548c2ecf20Sopenharmony_cistatic int test__checkevent_raw_modifier(struct evlist *evlist) 2558c2ecf20Sopenharmony_ci{ 2568c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 2578c2ecf20Sopenharmony_ci 2588c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 2598c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 2608c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 2618c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 2628c2ecf20Sopenharmony_ci 2638c2ecf20Sopenharmony_ci return test__checkevent_raw(evlist); 2648c2ecf20Sopenharmony_ci} 2658c2ecf20Sopenharmony_ci 2668c2ecf20Sopenharmony_cistatic int test__checkevent_numeric_modifier(struct evlist *evlist) 2678c2ecf20Sopenharmony_ci{ 2688c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 2698c2ecf20Sopenharmony_ci 2708c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 2718c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 2728c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 2738c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 2748c2ecf20Sopenharmony_ci 2758c2ecf20Sopenharmony_ci return test__checkevent_numeric(evlist); 2768c2ecf20Sopenharmony_ci} 2778c2ecf20Sopenharmony_ci 2788c2ecf20Sopenharmony_cistatic int test__checkevent_symbolic_name_modifier(struct evlist *evlist) 2798c2ecf20Sopenharmony_ci{ 2808c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 2818c2ecf20Sopenharmony_ci 2828c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 2838c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 2848c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 2858c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 2868c2ecf20Sopenharmony_ci 2878c2ecf20Sopenharmony_ci return test__checkevent_symbolic_name(evlist); 2888c2ecf20Sopenharmony_ci} 2898c2ecf20Sopenharmony_ci 2908c2ecf20Sopenharmony_cistatic int test__checkevent_exclude_host_modifier(struct evlist *evlist) 2918c2ecf20Sopenharmony_ci{ 2928c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 2938c2ecf20Sopenharmony_ci 2948c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 2958c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 2968c2ecf20Sopenharmony_ci 2978c2ecf20Sopenharmony_ci return test__checkevent_symbolic_name(evlist); 2988c2ecf20Sopenharmony_ci} 2998c2ecf20Sopenharmony_ci 3008c2ecf20Sopenharmony_cistatic int test__checkevent_exclude_guest_modifier(struct evlist *evlist) 3018c2ecf20Sopenharmony_ci{ 3028c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 3038c2ecf20Sopenharmony_ci 3048c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 3058c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 3068c2ecf20Sopenharmony_ci 3078c2ecf20Sopenharmony_ci return test__checkevent_symbolic_name(evlist); 3088c2ecf20Sopenharmony_ci} 3098c2ecf20Sopenharmony_ci 3108c2ecf20Sopenharmony_cistatic int test__checkevent_symbolic_alias_modifier(struct evlist *evlist) 3118c2ecf20Sopenharmony_ci{ 3128c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 3138c2ecf20Sopenharmony_ci 3148c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 3158c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 3168c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 3178c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 3188c2ecf20Sopenharmony_ci 3198c2ecf20Sopenharmony_ci return test__checkevent_symbolic_alias(evlist); 3208c2ecf20Sopenharmony_ci} 3218c2ecf20Sopenharmony_ci 3228c2ecf20Sopenharmony_cistatic int test__checkevent_genhw_modifier(struct evlist *evlist) 3238c2ecf20Sopenharmony_ci{ 3248c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 3258c2ecf20Sopenharmony_ci 3268c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 3278c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 3288c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 3298c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 3308c2ecf20Sopenharmony_ci 3318c2ecf20Sopenharmony_ci return test__checkevent_genhw(evlist); 3328c2ecf20Sopenharmony_ci} 3338c2ecf20Sopenharmony_ci 3348c2ecf20Sopenharmony_cistatic int test__checkevent_exclude_idle_modifier(struct evlist *evlist) 3358c2ecf20Sopenharmony_ci{ 3368c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 3378c2ecf20Sopenharmony_ci 3388c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude idle", evsel->core.attr.exclude_idle); 3398c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 3408c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 3418c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 3428c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 3438c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 3448c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 3458c2ecf20Sopenharmony_ci 3468c2ecf20Sopenharmony_ci return test__checkevent_symbolic_name(evlist); 3478c2ecf20Sopenharmony_ci} 3488c2ecf20Sopenharmony_ci 3498c2ecf20Sopenharmony_cistatic int test__checkevent_exclude_idle_modifier_1(struct evlist *evlist) 3508c2ecf20Sopenharmony_ci{ 3518c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 3528c2ecf20Sopenharmony_ci 3538c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude idle", evsel->core.attr.exclude_idle); 3548c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 3558c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 3568c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 3578c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 3588c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 3598c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 3608c2ecf20Sopenharmony_ci 3618c2ecf20Sopenharmony_ci return test__checkevent_symbolic_name(evlist); 3628c2ecf20Sopenharmony_ci} 3638c2ecf20Sopenharmony_ci 3648c2ecf20Sopenharmony_cistatic int test__checkevent_breakpoint_modifier(struct evlist *evlist) 3658c2ecf20Sopenharmony_ci{ 3668c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 3678c2ecf20Sopenharmony_ci 3688c2ecf20Sopenharmony_ci 3698c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 3708c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 3718c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 3728c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 3738c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong name", 3748c2ecf20Sopenharmony_ci !strcmp(evsel__name(evsel), "mem:0:u")); 3758c2ecf20Sopenharmony_ci 3768c2ecf20Sopenharmony_ci return test__checkevent_breakpoint(evlist); 3778c2ecf20Sopenharmony_ci} 3788c2ecf20Sopenharmony_ci 3798c2ecf20Sopenharmony_cistatic int test__checkevent_breakpoint_x_modifier(struct evlist *evlist) 3808c2ecf20Sopenharmony_ci{ 3818c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 3828c2ecf20Sopenharmony_ci 3838c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 3848c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 3858c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 3868c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 3878c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong name", 3888c2ecf20Sopenharmony_ci !strcmp(evsel__name(evsel), "mem:0:x:k")); 3898c2ecf20Sopenharmony_ci 3908c2ecf20Sopenharmony_ci return test__checkevent_breakpoint_x(evlist); 3918c2ecf20Sopenharmony_ci} 3928c2ecf20Sopenharmony_ci 3938c2ecf20Sopenharmony_cistatic int test__checkevent_breakpoint_r_modifier(struct evlist *evlist) 3948c2ecf20Sopenharmony_ci{ 3958c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 3968c2ecf20Sopenharmony_ci 3978c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 3988c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 3998c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 4008c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 4018c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong name", 4028c2ecf20Sopenharmony_ci !strcmp(evsel__name(evsel), "mem:0:r:hp")); 4038c2ecf20Sopenharmony_ci 4048c2ecf20Sopenharmony_ci return test__checkevent_breakpoint_r(evlist); 4058c2ecf20Sopenharmony_ci} 4068c2ecf20Sopenharmony_ci 4078c2ecf20Sopenharmony_cistatic int test__checkevent_breakpoint_w_modifier(struct evlist *evlist) 4088c2ecf20Sopenharmony_ci{ 4098c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 4108c2ecf20Sopenharmony_ci 4118c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 4128c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 4138c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 4148c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 4158c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong name", 4168c2ecf20Sopenharmony_ci !strcmp(evsel__name(evsel), "mem:0:w:up")); 4178c2ecf20Sopenharmony_ci 4188c2ecf20Sopenharmony_ci return test__checkevent_breakpoint_w(evlist); 4198c2ecf20Sopenharmony_ci} 4208c2ecf20Sopenharmony_ci 4218c2ecf20Sopenharmony_cistatic int test__checkevent_breakpoint_rw_modifier(struct evlist *evlist) 4228c2ecf20Sopenharmony_ci{ 4238c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 4248c2ecf20Sopenharmony_ci 4258c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 4268c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 4278c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 4288c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 4298c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong name", 4308c2ecf20Sopenharmony_ci !strcmp(evsel__name(evsel), "mem:0:rw:kp")); 4318c2ecf20Sopenharmony_ci 4328c2ecf20Sopenharmony_ci return test__checkevent_breakpoint_rw(evlist); 4338c2ecf20Sopenharmony_ci} 4348c2ecf20Sopenharmony_ci 4358c2ecf20Sopenharmony_cistatic int test__checkevent_pmu(struct evlist *evlist) 4368c2ecf20Sopenharmony_ci{ 4378c2ecf20Sopenharmony_ci 4388c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 4398c2ecf20Sopenharmony_ci 4408c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 4418c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 4428c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 10 == evsel->core.attr.config); 4438c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config1", 1 == evsel->core.attr.config1); 4448c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config2", 3 == evsel->core.attr.config2); 4458c2ecf20Sopenharmony_ci /* 4468c2ecf20Sopenharmony_ci * The period value gets configured within perf_evlist__config, 4478c2ecf20Sopenharmony_ci * while this test executes only parse events method. 4488c2ecf20Sopenharmony_ci */ 4498c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong period", 0 == evsel->core.attr.sample_period); 4508c2ecf20Sopenharmony_ci 4518c2ecf20Sopenharmony_ci return 0; 4528c2ecf20Sopenharmony_ci} 4538c2ecf20Sopenharmony_ci 4548c2ecf20Sopenharmony_cistatic int test__checkevent_list(struct evlist *evlist) 4558c2ecf20Sopenharmony_ci{ 4568c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 4578c2ecf20Sopenharmony_ci 4588c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 4598c2ecf20Sopenharmony_ci 4608c2ecf20Sopenharmony_ci /* r1 */ 4618c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 4628c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config); 4638c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config1", 0 == evsel->core.attr.config1); 4648c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config2", 0 == evsel->core.attr.config2); 4658c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 4668c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 4678c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 4688c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 4698c2ecf20Sopenharmony_ci 4708c2ecf20Sopenharmony_ci /* syscalls:sys_enter_openat:k */ 4718c2ecf20Sopenharmony_ci evsel = evsel__next(evsel); 4728c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 4738c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong sample_type", 4748c2ecf20Sopenharmony_ci PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 4758c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period); 4768c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 4778c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 4788c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 4798c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 4808c2ecf20Sopenharmony_ci 4818c2ecf20Sopenharmony_ci /* 1:1:hp */ 4828c2ecf20Sopenharmony_ci evsel = evsel__next(evsel); 4838c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type); 4848c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config); 4858c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 4868c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 4878c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 4888c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 4898c2ecf20Sopenharmony_ci 4908c2ecf20Sopenharmony_ci return 0; 4918c2ecf20Sopenharmony_ci} 4928c2ecf20Sopenharmony_ci 4938c2ecf20Sopenharmony_cistatic int test__checkevent_pmu_name(struct evlist *evlist) 4948c2ecf20Sopenharmony_ci{ 4958c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 4968c2ecf20Sopenharmony_ci 4978c2ecf20Sopenharmony_ci /* cpu/config=1,name=krava/u */ 4988c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 4998c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 5008c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config); 5018c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong name", !strcmp(evsel__name(evsel), "krava")); 5028c2ecf20Sopenharmony_ci 5038c2ecf20Sopenharmony_ci /* cpu/config=2/u" */ 5048c2ecf20Sopenharmony_ci evsel = evsel__next(evsel); 5058c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 5068c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 5078c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 2 == evsel->core.attr.config); 5088c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong name", 5098c2ecf20Sopenharmony_ci !strcmp(evsel__name(evsel), "cpu/config=2/u")); 5108c2ecf20Sopenharmony_ci 5118c2ecf20Sopenharmony_ci return 0; 5128c2ecf20Sopenharmony_ci} 5138c2ecf20Sopenharmony_ci 5148c2ecf20Sopenharmony_cistatic int test__checkevent_pmu_partial_time_callgraph(struct evlist *evlist) 5158c2ecf20Sopenharmony_ci{ 5168c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 5178c2ecf20Sopenharmony_ci 5188c2ecf20Sopenharmony_ci /* cpu/config=1,call-graph=fp,time,period=100000/ */ 5198c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 5208c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 5218c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config); 5228c2ecf20Sopenharmony_ci /* 5238c2ecf20Sopenharmony_ci * The period, time and callgraph value gets configured 5248c2ecf20Sopenharmony_ci * within perf_evlist__config, 5258c2ecf20Sopenharmony_ci * while this test executes only parse events method. 5268c2ecf20Sopenharmony_ci */ 5278c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong period", 0 == evsel->core.attr.sample_period); 5288c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong callgraph", !evsel__has_callchain(evsel)); 5298c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong time", !(PERF_SAMPLE_TIME & evsel->core.attr.sample_type)); 5308c2ecf20Sopenharmony_ci 5318c2ecf20Sopenharmony_ci /* cpu/config=2,call-graph=no,time=0,period=2000/ */ 5328c2ecf20Sopenharmony_ci evsel = evsel__next(evsel); 5338c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 5348c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 2 == evsel->core.attr.config); 5358c2ecf20Sopenharmony_ci /* 5368c2ecf20Sopenharmony_ci * The period, time and callgraph value gets configured 5378c2ecf20Sopenharmony_ci * within perf_evlist__config, 5388c2ecf20Sopenharmony_ci * while this test executes only parse events method. 5398c2ecf20Sopenharmony_ci */ 5408c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong period", 0 == evsel->core.attr.sample_period); 5418c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong callgraph", !evsel__has_callchain(evsel)); 5428c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong time", !(PERF_SAMPLE_TIME & evsel->core.attr.sample_type)); 5438c2ecf20Sopenharmony_ci 5448c2ecf20Sopenharmony_ci return 0; 5458c2ecf20Sopenharmony_ci} 5468c2ecf20Sopenharmony_ci 5478c2ecf20Sopenharmony_cistatic int test__checkevent_pmu_events(struct evlist *evlist) 5488c2ecf20Sopenharmony_ci{ 5498c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 5508c2ecf20Sopenharmony_ci 5518c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 5528c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 5538c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", 5548c2ecf20Sopenharmony_ci !evsel->core.attr.exclude_user); 5558c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", 5568c2ecf20Sopenharmony_ci evsel->core.attr.exclude_kernel); 5578c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 5588c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 5598c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 5608c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 5618c2ecf20Sopenharmony_ci 5628c2ecf20Sopenharmony_ci return 0; 5638c2ecf20Sopenharmony_ci} 5648c2ecf20Sopenharmony_ci 5658c2ecf20Sopenharmony_ci 5668c2ecf20Sopenharmony_cistatic int test__checkevent_pmu_events_mix(struct evlist *evlist) 5678c2ecf20Sopenharmony_ci{ 5688c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 5698c2ecf20Sopenharmony_ci 5708c2ecf20Sopenharmony_ci /* pmu-event:u */ 5718c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 5728c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", 5738c2ecf20Sopenharmony_ci !evsel->core.attr.exclude_user); 5748c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", 5758c2ecf20Sopenharmony_ci evsel->core.attr.exclude_kernel); 5768c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 5778c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 5788c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 5798c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 5808c2ecf20Sopenharmony_ci 5818c2ecf20Sopenharmony_ci /* cpu/pmu-event/u*/ 5828c2ecf20Sopenharmony_ci evsel = evsel__next(evsel); 5838c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 5848c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 5858c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", 5868c2ecf20Sopenharmony_ci !evsel->core.attr.exclude_user); 5878c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", 5888c2ecf20Sopenharmony_ci evsel->core.attr.exclude_kernel); 5898c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 5908c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 5918c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 5928c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.pinned); 5938c2ecf20Sopenharmony_ci 5948c2ecf20Sopenharmony_ci return 0; 5958c2ecf20Sopenharmony_ci} 5968c2ecf20Sopenharmony_ci 5978c2ecf20Sopenharmony_cistatic int test__checkterms_simple(struct list_head *terms) 5988c2ecf20Sopenharmony_ci{ 5998c2ecf20Sopenharmony_ci struct parse_events_term *term; 6008c2ecf20Sopenharmony_ci 6018c2ecf20Sopenharmony_ci /* config=10 */ 6028c2ecf20Sopenharmony_ci term = list_entry(terms->next, struct parse_events_term, list); 6038c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type term", 6048c2ecf20Sopenharmony_ci term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG); 6058c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type val", 6068c2ecf20Sopenharmony_ci term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 6078c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong val", term->val.num == 10); 6088c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", !term->config); 6098c2ecf20Sopenharmony_ci 6108c2ecf20Sopenharmony_ci /* config1 */ 6118c2ecf20Sopenharmony_ci term = list_entry(term->list.next, struct parse_events_term, list); 6128c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type term", 6138c2ecf20Sopenharmony_ci term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG1); 6148c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type val", 6158c2ecf20Sopenharmony_ci term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 6168c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong val", term->val.num == 1); 6178c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", !term->config); 6188c2ecf20Sopenharmony_ci 6198c2ecf20Sopenharmony_ci /* config2=3 */ 6208c2ecf20Sopenharmony_ci term = list_entry(term->list.next, struct parse_events_term, list); 6218c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type term", 6228c2ecf20Sopenharmony_ci term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG2); 6238c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type val", 6248c2ecf20Sopenharmony_ci term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 6258c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong val", term->val.num == 3); 6268c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", !term->config); 6278c2ecf20Sopenharmony_ci 6288c2ecf20Sopenharmony_ci /* umask=1*/ 6298c2ecf20Sopenharmony_ci term = list_entry(term->list.next, struct parse_events_term, list); 6308c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type term", 6318c2ecf20Sopenharmony_ci term->type_term == PARSE_EVENTS__TERM_TYPE_USER); 6328c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type val", 6338c2ecf20Sopenharmony_ci term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 6348c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong val", term->val.num == 1); 6358c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "umask")); 6368c2ecf20Sopenharmony_ci 6378c2ecf20Sopenharmony_ci /* 6388c2ecf20Sopenharmony_ci * read 6398c2ecf20Sopenharmony_ci * 6408c2ecf20Sopenharmony_ci * The perf_pmu__test_parse_init injects 'read' term into 6418c2ecf20Sopenharmony_ci * perf_pmu_events_list, so 'read' is evaluated as read term 6428c2ecf20Sopenharmony_ci * and not as raw event with 'ead' hex value. 6438c2ecf20Sopenharmony_ci */ 6448c2ecf20Sopenharmony_ci term = list_entry(term->list.next, struct parse_events_term, list); 6458c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type term", 6468c2ecf20Sopenharmony_ci term->type_term == PARSE_EVENTS__TERM_TYPE_USER); 6478c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type val", 6488c2ecf20Sopenharmony_ci term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 6498c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong val", term->val.num == 1); 6508c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "read")); 6518c2ecf20Sopenharmony_ci 6528c2ecf20Sopenharmony_ci /* 6538c2ecf20Sopenharmony_ci * r0xead 6548c2ecf20Sopenharmony_ci * 6558c2ecf20Sopenharmony_ci * To be still able to pass 'ead' value with 'r' syntax, 6568c2ecf20Sopenharmony_ci * we added support to parse 'r0xHEX' event. 6578c2ecf20Sopenharmony_ci */ 6588c2ecf20Sopenharmony_ci term = list_entry(term->list.next, struct parse_events_term, list); 6598c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type term", 6608c2ecf20Sopenharmony_ci term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG); 6618c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type val", 6628c2ecf20Sopenharmony_ci term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 6638c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong val", term->val.num == 0xead); 6648c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", !term->config); 6658c2ecf20Sopenharmony_ci return 0; 6668c2ecf20Sopenharmony_ci} 6678c2ecf20Sopenharmony_ci 6688c2ecf20Sopenharmony_cistatic int test__group1(struct evlist *evlist) 6698c2ecf20Sopenharmony_ci{ 6708c2ecf20Sopenharmony_ci struct evsel *evsel, *leader; 6718c2ecf20Sopenharmony_ci 6728c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 6738c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 6748c2ecf20Sopenharmony_ci 6758c2ecf20Sopenharmony_ci /* instructions:k */ 6768c2ecf20Sopenharmony_ci evsel = leader = evlist__first(evlist); 6778c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 6788c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 6798c2ecf20Sopenharmony_ci PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 6808c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 6818c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 6828c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 6838c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 6848c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 6858c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 6868c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 6878c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 6888c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 6898c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 6908c2ecf20Sopenharmony_ci 6918c2ecf20Sopenharmony_ci /* cycles:upp */ 6928c2ecf20Sopenharmony_ci evsel = evsel__next(evsel); 6938c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 6948c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 6958c2ecf20Sopenharmony_ci PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 6968c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 6978c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 6988c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 6998c2ecf20Sopenharmony_ci /* use of precise requires exclude_guest */ 7008c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 7018c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7028c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2); 7038c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 7048c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 7058c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 7068c2ecf20Sopenharmony_ci 7078c2ecf20Sopenharmony_ci return 0; 7088c2ecf20Sopenharmony_ci} 7098c2ecf20Sopenharmony_ci 7108c2ecf20Sopenharmony_cistatic int test__group2(struct evlist *evlist) 7118c2ecf20Sopenharmony_ci{ 7128c2ecf20Sopenharmony_ci struct evsel *evsel, *leader; 7138c2ecf20Sopenharmony_ci 7148c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 7158c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 7168c2ecf20Sopenharmony_ci 7178c2ecf20Sopenharmony_ci /* faults + :ku modifier */ 7188c2ecf20Sopenharmony_ci evsel = leader = evlist__first(evlist); 7198c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 7208c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 7218c2ecf20Sopenharmony_ci PERF_COUNT_SW_PAGE_FAULTS == evsel->core.attr.config); 7228c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 7238c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 7248c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 7258c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 7268c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7278c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 7288c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 7298c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 7308c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 7318c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 7328c2ecf20Sopenharmony_ci 7338c2ecf20Sopenharmony_ci /* cache-references + :u modifier */ 7348c2ecf20Sopenharmony_ci evsel = evsel__next(evsel); 7358c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 7368c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 7378c2ecf20Sopenharmony_ci PERF_COUNT_HW_CACHE_REFERENCES == evsel->core.attr.config); 7388c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 7398c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 7408c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 7418c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 7428c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7438c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 7448c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 7458c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 7468c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 7478c2ecf20Sopenharmony_ci 7488c2ecf20Sopenharmony_ci /* cycles:k */ 7498c2ecf20Sopenharmony_ci evsel = evsel__next(evsel); 7508c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 7518c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 7528c2ecf20Sopenharmony_ci PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 7538c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 7548c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 7558c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 7568c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 7578c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7588c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 7598c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 7608c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 7618c2ecf20Sopenharmony_ci 7628c2ecf20Sopenharmony_ci return 0; 7638c2ecf20Sopenharmony_ci} 7648c2ecf20Sopenharmony_ci 7658c2ecf20Sopenharmony_cistatic int test__group3(struct evlist *evlist __maybe_unused) 7668c2ecf20Sopenharmony_ci{ 7678c2ecf20Sopenharmony_ci struct evsel *evsel, *leader; 7688c2ecf20Sopenharmony_ci 7698c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->core.nr_entries); 7708c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of groups", 2 == evlist->nr_groups); 7718c2ecf20Sopenharmony_ci 7728c2ecf20Sopenharmony_ci /* group1 syscalls:sys_enter_openat:H */ 7738c2ecf20Sopenharmony_ci evsel = leader = evlist__first(evlist); 7748c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 7758c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong sample_type", 7768c2ecf20Sopenharmony_ci PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 7778c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period); 7788c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 7798c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 7808c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 7818c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 7828c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7838c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 7848c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 7858c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong group name", 7868c2ecf20Sopenharmony_ci !strcmp(leader->group_name, "group1")); 7878c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 7888c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 7898c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 7908c2ecf20Sopenharmony_ci 7918c2ecf20Sopenharmony_ci /* group1 cycles:kppp */ 7928c2ecf20Sopenharmony_ci evsel = evsel__next(evsel); 7938c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 7948c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 7958c2ecf20Sopenharmony_ci PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 7968c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 7978c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 7988c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 7998c2ecf20Sopenharmony_ci /* use of precise requires exclude_guest */ 8008c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 8018c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8028c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 3); 8038c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 8048c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 8058c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 8068c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 8078c2ecf20Sopenharmony_ci 8088c2ecf20Sopenharmony_ci /* group2 cycles + G modifier */ 8098c2ecf20Sopenharmony_ci evsel = leader = evsel__next(evsel); 8108c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 8118c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 8128c2ecf20Sopenharmony_ci PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 8138c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8148c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 8158c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 8168c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 8178c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 8188c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 8198c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 8208c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong group name", 8218c2ecf20Sopenharmony_ci !strcmp(leader->group_name, "group2")); 8228c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 8238c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 8248c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 8258c2ecf20Sopenharmony_ci 8268c2ecf20Sopenharmony_ci /* group2 1:3 + G modifier */ 8278c2ecf20Sopenharmony_ci evsel = evsel__next(evsel); 8288c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type); 8298c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 3 == evsel->core.attr.config); 8308c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8318c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 8328c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 8338c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 8348c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 8358c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 8368c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 8378c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 8388c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 8398c2ecf20Sopenharmony_ci 8408c2ecf20Sopenharmony_ci /* instructions:u */ 8418c2ecf20Sopenharmony_ci evsel = evsel__next(evsel); 8428c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 8438c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 8448c2ecf20Sopenharmony_ci PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 8458c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8468c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 8478c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 8488c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 8498c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8508c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 8518c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 8528c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 8538c2ecf20Sopenharmony_ci 8548c2ecf20Sopenharmony_ci return 0; 8558c2ecf20Sopenharmony_ci} 8568c2ecf20Sopenharmony_ci 8578c2ecf20Sopenharmony_cistatic int test__group4(struct evlist *evlist __maybe_unused) 8588c2ecf20Sopenharmony_ci{ 8598c2ecf20Sopenharmony_ci struct evsel *evsel, *leader; 8608c2ecf20Sopenharmony_ci 8618c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 8628c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 8638c2ecf20Sopenharmony_ci 8648c2ecf20Sopenharmony_ci /* cycles:u + p */ 8658c2ecf20Sopenharmony_ci evsel = leader = evlist__first(evlist); 8668c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 8678c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 8688c2ecf20Sopenharmony_ci PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 8698c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8708c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 8718c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 8728c2ecf20Sopenharmony_ci /* use of precise requires exclude_guest */ 8738c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 8748c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8758c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 1); 8768c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 8778c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 8788c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 8798c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 8808c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 8818c2ecf20Sopenharmony_ci 8828c2ecf20Sopenharmony_ci /* instructions:kp + p */ 8838c2ecf20Sopenharmony_ci evsel = evsel__next(evsel); 8848c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 8858c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 8868c2ecf20Sopenharmony_ci PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 8878c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 8888c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 8898c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 8908c2ecf20Sopenharmony_ci /* use of precise requires exclude_guest */ 8918c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 8928c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8938c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2); 8948c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 8958c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 8968c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 8978c2ecf20Sopenharmony_ci 8988c2ecf20Sopenharmony_ci return 0; 8998c2ecf20Sopenharmony_ci} 9008c2ecf20Sopenharmony_ci 9018c2ecf20Sopenharmony_cistatic int test__group5(struct evlist *evlist __maybe_unused) 9028c2ecf20Sopenharmony_ci{ 9038c2ecf20Sopenharmony_ci struct evsel *evsel, *leader; 9048c2ecf20Sopenharmony_ci 9058c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->core.nr_entries); 9068c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of groups", 2 == evlist->nr_groups); 9078c2ecf20Sopenharmony_ci 9088c2ecf20Sopenharmony_ci /* cycles + G */ 9098c2ecf20Sopenharmony_ci evsel = leader = evlist__first(evlist); 9108c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 9118c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 9128c2ecf20Sopenharmony_ci PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 9138c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9148c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9158c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9168c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 9178c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 9188c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 9198c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 9208c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 9218c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 9228c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 9238c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 9248c2ecf20Sopenharmony_ci 9258c2ecf20Sopenharmony_ci /* instructions + G */ 9268c2ecf20Sopenharmony_ci evsel = evsel__next(evsel); 9278c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 9288c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 9298c2ecf20Sopenharmony_ci PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 9308c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9318c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9328c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9338c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 9348c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 9358c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 9368c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 9378c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 9388c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 9398c2ecf20Sopenharmony_ci 9408c2ecf20Sopenharmony_ci /* cycles:G */ 9418c2ecf20Sopenharmony_ci evsel = leader = evsel__next(evsel); 9428c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 9438c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 9448c2ecf20Sopenharmony_ci PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 9458c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9468c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9478c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9488c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 9498c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 9508c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 9518c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 9528c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 9538c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 9548c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 9558c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 9568c2ecf20Sopenharmony_ci 9578c2ecf20Sopenharmony_ci /* instructions:G */ 9588c2ecf20Sopenharmony_ci evsel = evsel__next(evsel); 9598c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 9608c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 9618c2ecf20Sopenharmony_ci PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 9628c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9638c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9648c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9658c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 9668c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 9678c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 9688c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 9698c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 9708c2ecf20Sopenharmony_ci 9718c2ecf20Sopenharmony_ci /* cycles */ 9728c2ecf20Sopenharmony_ci evsel = evsel__next(evsel); 9738c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 9748c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 9758c2ecf20Sopenharmony_ci PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 9768c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9778c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9788c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9798c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 9808c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 9818c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 9828c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 9838c2ecf20Sopenharmony_ci 9848c2ecf20Sopenharmony_ci return 0; 9858c2ecf20Sopenharmony_ci} 9868c2ecf20Sopenharmony_ci 9878c2ecf20Sopenharmony_cistatic int test__group_gh1(struct evlist *evlist) 9888c2ecf20Sopenharmony_ci{ 9898c2ecf20Sopenharmony_ci struct evsel *evsel, *leader; 9908c2ecf20Sopenharmony_ci 9918c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 9928c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 9938c2ecf20Sopenharmony_ci 9948c2ecf20Sopenharmony_ci /* cycles + :H group modifier */ 9958c2ecf20Sopenharmony_ci evsel = leader = evlist__first(evlist); 9968c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 9978c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 9988c2ecf20Sopenharmony_ci PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 9998c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10008c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10018c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10028c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 10038c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10048c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 10058c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 10068c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 10078c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 10088c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 10098c2ecf20Sopenharmony_ci 10108c2ecf20Sopenharmony_ci /* cache-misses:G + :H group modifier */ 10118c2ecf20Sopenharmony_ci evsel = evsel__next(evsel); 10128c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10138c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 10148c2ecf20Sopenharmony_ci PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 10158c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10168c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10178c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10188c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10198c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10208c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 10218c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 10228c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 10238c2ecf20Sopenharmony_ci 10248c2ecf20Sopenharmony_ci return 0; 10258c2ecf20Sopenharmony_ci} 10268c2ecf20Sopenharmony_ci 10278c2ecf20Sopenharmony_cistatic int test__group_gh2(struct evlist *evlist) 10288c2ecf20Sopenharmony_ci{ 10298c2ecf20Sopenharmony_ci struct evsel *evsel, *leader; 10308c2ecf20Sopenharmony_ci 10318c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 10328c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 10338c2ecf20Sopenharmony_ci 10348c2ecf20Sopenharmony_ci /* cycles + :G group modifier */ 10358c2ecf20Sopenharmony_ci evsel = leader = evlist__first(evlist); 10368c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10378c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 10388c2ecf20Sopenharmony_ci PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 10398c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10408c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10418c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10428c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10438c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 10448c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 10458c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 10468c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 10478c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 10488c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 10498c2ecf20Sopenharmony_ci 10508c2ecf20Sopenharmony_ci /* cache-misses:H + :G group modifier */ 10518c2ecf20Sopenharmony_ci evsel = evsel__next(evsel); 10528c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10538c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 10548c2ecf20Sopenharmony_ci PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 10558c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10568c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10578c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10588c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10598c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10608c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 10618c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 10628c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 10638c2ecf20Sopenharmony_ci 10648c2ecf20Sopenharmony_ci return 0; 10658c2ecf20Sopenharmony_ci} 10668c2ecf20Sopenharmony_ci 10678c2ecf20Sopenharmony_cistatic int test__group_gh3(struct evlist *evlist) 10688c2ecf20Sopenharmony_ci{ 10698c2ecf20Sopenharmony_ci struct evsel *evsel, *leader; 10708c2ecf20Sopenharmony_ci 10718c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 10728c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 10738c2ecf20Sopenharmony_ci 10748c2ecf20Sopenharmony_ci /* cycles:G + :u group modifier */ 10758c2ecf20Sopenharmony_ci evsel = leader = evlist__first(evlist); 10768c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10778c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 10788c2ecf20Sopenharmony_ci PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 10798c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10808c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 10818c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 10828c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10838c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 10848c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 10858c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 10868c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 10878c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 10888c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 10898c2ecf20Sopenharmony_ci 10908c2ecf20Sopenharmony_ci /* cache-misses:H + :u group modifier */ 10918c2ecf20Sopenharmony_ci evsel = evsel__next(evsel); 10928c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10938c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 10948c2ecf20Sopenharmony_ci PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 10958c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10968c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 10978c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 10988c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 10998c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11008c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 11018c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 11028c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 11038c2ecf20Sopenharmony_ci 11048c2ecf20Sopenharmony_ci return 0; 11058c2ecf20Sopenharmony_ci} 11068c2ecf20Sopenharmony_ci 11078c2ecf20Sopenharmony_cistatic int test__group_gh4(struct evlist *evlist) 11088c2ecf20Sopenharmony_ci{ 11098c2ecf20Sopenharmony_ci struct evsel *evsel, *leader; 11108c2ecf20Sopenharmony_ci 11118c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 11128c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 11138c2ecf20Sopenharmony_ci 11148c2ecf20Sopenharmony_ci /* cycles:G + :uG group modifier */ 11158c2ecf20Sopenharmony_ci evsel = leader = evlist__first(evlist); 11168c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11178c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 11188c2ecf20Sopenharmony_ci PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 11198c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11208c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 11218c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 11228c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 11238c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 11248c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 11258c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 11268c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 11278c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 11288c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 11298c2ecf20Sopenharmony_ci 11308c2ecf20Sopenharmony_ci /* cache-misses:H + :uG group modifier */ 11318c2ecf20Sopenharmony_ci evsel = evsel__next(evsel); 11328c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11338c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 11348c2ecf20Sopenharmony_ci PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 11358c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11368c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 11378c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 11388c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 11398c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11408c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 11418c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 11428c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 11438c2ecf20Sopenharmony_ci 11448c2ecf20Sopenharmony_ci return 0; 11458c2ecf20Sopenharmony_ci} 11468c2ecf20Sopenharmony_ci 11478c2ecf20Sopenharmony_cistatic int test__leader_sample1(struct evlist *evlist) 11488c2ecf20Sopenharmony_ci{ 11498c2ecf20Sopenharmony_ci struct evsel *evsel, *leader; 11508c2ecf20Sopenharmony_ci 11518c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 11528c2ecf20Sopenharmony_ci 11538c2ecf20Sopenharmony_ci /* cycles - sampling group leader */ 11548c2ecf20Sopenharmony_ci evsel = leader = evlist__first(evlist); 11558c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11568c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 11578c2ecf20Sopenharmony_ci PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 11588c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11598c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 11608c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 11618c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 11628c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11638c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 11648c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 11658c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 11668c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 11678c2ecf20Sopenharmony_ci 11688c2ecf20Sopenharmony_ci /* cache-misses - not sampling */ 11698c2ecf20Sopenharmony_ci evsel = evsel__next(evsel); 11708c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11718c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 11728c2ecf20Sopenharmony_ci PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 11738c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11748c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 11758c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 11768c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 11778c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11788c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 11798c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 11808c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 11818c2ecf20Sopenharmony_ci 11828c2ecf20Sopenharmony_ci /* branch-misses - not sampling */ 11838c2ecf20Sopenharmony_ci evsel = evsel__next(evsel); 11848c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11858c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 11868c2ecf20Sopenharmony_ci PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config); 11878c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11888c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 11898c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 11908c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 11918c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11928c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 11938c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 11948c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 11958c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 11968c2ecf20Sopenharmony_ci 11978c2ecf20Sopenharmony_ci return 0; 11988c2ecf20Sopenharmony_ci} 11998c2ecf20Sopenharmony_ci 12008c2ecf20Sopenharmony_cistatic int test__leader_sample2(struct evlist *evlist __maybe_unused) 12018c2ecf20Sopenharmony_ci{ 12028c2ecf20Sopenharmony_ci struct evsel *evsel, *leader; 12038c2ecf20Sopenharmony_ci 12048c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 12058c2ecf20Sopenharmony_ci 12068c2ecf20Sopenharmony_ci /* instructions - sampling group leader */ 12078c2ecf20Sopenharmony_ci evsel = leader = evlist__first(evlist); 12088c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 12098c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 12108c2ecf20Sopenharmony_ci PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 12118c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12128c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 12138c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 12148c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 12158c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 12168c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 12178c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 12188c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 12198c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 12208c2ecf20Sopenharmony_ci 12218c2ecf20Sopenharmony_ci /* branch-misses - not sampling */ 12228c2ecf20Sopenharmony_ci evsel = evsel__next(evsel); 12238c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 12248c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 12258c2ecf20Sopenharmony_ci PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config); 12268c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12278c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 12288c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 12298c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 12308c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 12318c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 12328c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 12338c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 12348c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 12358c2ecf20Sopenharmony_ci 12368c2ecf20Sopenharmony_ci return 0; 12378c2ecf20Sopenharmony_ci} 12388c2ecf20Sopenharmony_ci 12398c2ecf20Sopenharmony_cistatic int test__checkevent_pinned_modifier(struct evlist *evlist) 12408c2ecf20Sopenharmony_ci{ 12418c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 12428c2ecf20Sopenharmony_ci 12438c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12448c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 12458c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 12468c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 12478c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned); 12488c2ecf20Sopenharmony_ci 12498c2ecf20Sopenharmony_ci return test__checkevent_symbolic_name(evlist); 12508c2ecf20Sopenharmony_ci} 12518c2ecf20Sopenharmony_ci 12528c2ecf20Sopenharmony_cistatic int test__pinned_group(struct evlist *evlist) 12538c2ecf20Sopenharmony_ci{ 12548c2ecf20Sopenharmony_ci struct evsel *evsel, *leader; 12558c2ecf20Sopenharmony_ci 12568c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 12578c2ecf20Sopenharmony_ci 12588c2ecf20Sopenharmony_ci /* cycles - group leader */ 12598c2ecf20Sopenharmony_ci evsel = leader = evlist__first(evlist); 12608c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 12618c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 12628c2ecf20Sopenharmony_ci PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 12638c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 12648c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 12658c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned); 12668c2ecf20Sopenharmony_ci 12678c2ecf20Sopenharmony_ci /* cache-misses - can not be pinned, but will go on with the leader */ 12688c2ecf20Sopenharmony_ci evsel = evsel__next(evsel); 12698c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 12708c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 12718c2ecf20Sopenharmony_ci PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 12728c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 12738c2ecf20Sopenharmony_ci 12748c2ecf20Sopenharmony_ci /* branch-misses - ditto */ 12758c2ecf20Sopenharmony_ci evsel = evsel__next(evsel); 12768c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 12778c2ecf20Sopenharmony_ci PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config); 12788c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 12798c2ecf20Sopenharmony_ci 12808c2ecf20Sopenharmony_ci return 0; 12818c2ecf20Sopenharmony_ci} 12828c2ecf20Sopenharmony_ci 12838c2ecf20Sopenharmony_cistatic int test__checkevent_exclusive_modifier(struct evlist *evlist) 12848c2ecf20Sopenharmony_ci{ 12858c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 12868c2ecf20Sopenharmony_ci 12878c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12888c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 12898c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 12908c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 12918c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclusive", evsel->core.attr.exclusive); 12928c2ecf20Sopenharmony_ci 12938c2ecf20Sopenharmony_ci return test__checkevent_symbolic_name(evlist); 12948c2ecf20Sopenharmony_ci} 12958c2ecf20Sopenharmony_ci 12968c2ecf20Sopenharmony_cistatic int test__exclusive_group(struct evlist *evlist) 12978c2ecf20Sopenharmony_ci{ 12988c2ecf20Sopenharmony_ci struct evsel *evsel, *leader; 12998c2ecf20Sopenharmony_ci 13008c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 13018c2ecf20Sopenharmony_ci 13028c2ecf20Sopenharmony_ci /* cycles - group leader */ 13038c2ecf20Sopenharmony_ci evsel = leader = evlist__first(evlist); 13048c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 13058c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 13068c2ecf20Sopenharmony_ci PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 13078c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 13088c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 13098c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclusive", evsel->core.attr.exclusive); 13108c2ecf20Sopenharmony_ci 13118c2ecf20Sopenharmony_ci /* cache-misses - can not be pinned, but will go on with the leader */ 13128c2ecf20Sopenharmony_ci evsel = evsel__next(evsel); 13138c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 13148c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 13158c2ecf20Sopenharmony_ci PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 13168c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 13178c2ecf20Sopenharmony_ci 13188c2ecf20Sopenharmony_ci /* branch-misses - ditto */ 13198c2ecf20Sopenharmony_ci evsel = evsel__next(evsel); 13208c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 13218c2ecf20Sopenharmony_ci PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config); 13228c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 13238c2ecf20Sopenharmony_ci 13248c2ecf20Sopenharmony_ci return 0; 13258c2ecf20Sopenharmony_ci} 13268c2ecf20Sopenharmony_cistatic int test__checkevent_breakpoint_len(struct evlist *evlist) 13278c2ecf20Sopenharmony_ci{ 13288c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 13298c2ecf20Sopenharmony_ci 13308c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 13318c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 13328c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 13338c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) == 13348c2ecf20Sopenharmony_ci evsel->core.attr.bp_type); 13358c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_1 == 13368c2ecf20Sopenharmony_ci evsel->core.attr.bp_len); 13378c2ecf20Sopenharmony_ci 13388c2ecf20Sopenharmony_ci return 0; 13398c2ecf20Sopenharmony_ci} 13408c2ecf20Sopenharmony_ci 13418c2ecf20Sopenharmony_cistatic int test__checkevent_breakpoint_len_w(struct evlist *evlist) 13428c2ecf20Sopenharmony_ci{ 13438c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 13448c2ecf20Sopenharmony_ci 13458c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 13468c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 13478c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 13488c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong bp_type", HW_BREAKPOINT_W == 13498c2ecf20Sopenharmony_ci evsel->core.attr.bp_type); 13508c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_2 == 13518c2ecf20Sopenharmony_ci evsel->core.attr.bp_len); 13528c2ecf20Sopenharmony_ci 13538c2ecf20Sopenharmony_ci return 0; 13548c2ecf20Sopenharmony_ci} 13558c2ecf20Sopenharmony_ci 13568c2ecf20Sopenharmony_cistatic int 13578c2ecf20Sopenharmony_citest__checkevent_breakpoint_len_rw_modifier(struct evlist *evlist) 13588c2ecf20Sopenharmony_ci{ 13598c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 13608c2ecf20Sopenharmony_ci 13618c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 13628c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 13638c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 13648c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 13658c2ecf20Sopenharmony_ci 13668c2ecf20Sopenharmony_ci return test__checkevent_breakpoint_rw(evlist); 13678c2ecf20Sopenharmony_ci} 13688c2ecf20Sopenharmony_ci 13698c2ecf20Sopenharmony_cistatic int test__checkevent_precise_max_modifier(struct evlist *evlist) 13708c2ecf20Sopenharmony_ci{ 13718c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 13728c2ecf20Sopenharmony_ci 13738c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 13748c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 13758c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 13768c2ecf20Sopenharmony_ci PERF_COUNT_SW_TASK_CLOCK == evsel->core.attr.config); 13778c2ecf20Sopenharmony_ci return 0; 13788c2ecf20Sopenharmony_ci} 13798c2ecf20Sopenharmony_ci 13808c2ecf20Sopenharmony_cistatic int test__checkevent_config_symbol(struct evlist *evlist) 13818c2ecf20Sopenharmony_ci{ 13828c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 13838c2ecf20Sopenharmony_ci 13848c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "insn") == 0); 13858c2ecf20Sopenharmony_ci return 0; 13868c2ecf20Sopenharmony_ci} 13878c2ecf20Sopenharmony_ci 13888c2ecf20Sopenharmony_cistatic int test__checkevent_config_raw(struct evlist *evlist) 13898c2ecf20Sopenharmony_ci{ 13908c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 13918c2ecf20Sopenharmony_ci 13928c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "rawpmu") == 0); 13938c2ecf20Sopenharmony_ci return 0; 13948c2ecf20Sopenharmony_ci} 13958c2ecf20Sopenharmony_ci 13968c2ecf20Sopenharmony_cistatic int test__checkevent_config_num(struct evlist *evlist) 13978c2ecf20Sopenharmony_ci{ 13988c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 13998c2ecf20Sopenharmony_ci 14008c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "numpmu") == 0); 14018c2ecf20Sopenharmony_ci return 0; 14028c2ecf20Sopenharmony_ci} 14038c2ecf20Sopenharmony_ci 14048c2ecf20Sopenharmony_cistatic int test__checkevent_config_cache(struct evlist *evlist) 14058c2ecf20Sopenharmony_ci{ 14068c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 14078c2ecf20Sopenharmony_ci 14088c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "cachepmu") == 0); 14098c2ecf20Sopenharmony_ci return 0; 14108c2ecf20Sopenharmony_ci} 14118c2ecf20Sopenharmony_ci 14128c2ecf20Sopenharmony_cistatic bool test__intel_pt_valid(void) 14138c2ecf20Sopenharmony_ci{ 14148c2ecf20Sopenharmony_ci return !!perf_pmu__find("intel_pt"); 14158c2ecf20Sopenharmony_ci} 14168c2ecf20Sopenharmony_ci 14178c2ecf20Sopenharmony_cistatic int test__intel_pt(struct evlist *evlist) 14188c2ecf20Sopenharmony_ci{ 14198c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 14208c2ecf20Sopenharmony_ci 14218c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "intel_pt//u") == 0); 14228c2ecf20Sopenharmony_ci return 0; 14238c2ecf20Sopenharmony_ci} 14248c2ecf20Sopenharmony_ci 14258c2ecf20Sopenharmony_cistatic int test__checkevent_complex_name(struct evlist *evlist) 14268c2ecf20Sopenharmony_ci{ 14278c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 14288c2ecf20Sopenharmony_ci 14298c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong complex name parsing", strcmp(evsel->name, "COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks") == 0); 14308c2ecf20Sopenharmony_ci return 0; 14318c2ecf20Sopenharmony_ci} 14328c2ecf20Sopenharmony_ci 14338c2ecf20Sopenharmony_cistatic int test__checkevent_raw_pmu(struct evlist *evlist) 14348c2ecf20Sopenharmony_ci{ 14358c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 14368c2ecf20Sopenharmony_ci 14378c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 14388c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 14398c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config); 14408c2ecf20Sopenharmony_ci return 0; 14418c2ecf20Sopenharmony_ci} 14428c2ecf20Sopenharmony_ci 14438c2ecf20Sopenharmony_cistatic int test__sym_event_slash(struct evlist *evlist) 14448c2ecf20Sopenharmony_ci{ 14458c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 14468c2ecf20Sopenharmony_ci 14478c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE); 14488c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", evsel->core.attr.config == PERF_COUNT_HW_CPU_CYCLES); 14498c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 14508c2ecf20Sopenharmony_ci return 0; 14518c2ecf20Sopenharmony_ci} 14528c2ecf20Sopenharmony_ci 14538c2ecf20Sopenharmony_cistatic int test__sym_event_dc(struct evlist *evlist) 14548c2ecf20Sopenharmony_ci{ 14558c2ecf20Sopenharmony_ci struct evsel *evsel = evlist__first(evlist); 14568c2ecf20Sopenharmony_ci 14578c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE); 14588c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong config", evsel->core.attr.config == PERF_COUNT_HW_CPU_CYCLES); 14598c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 14608c2ecf20Sopenharmony_ci return 0; 14618c2ecf20Sopenharmony_ci} 14628c2ecf20Sopenharmony_ci 14638c2ecf20Sopenharmony_cistatic int count_tracepoints(void) 14648c2ecf20Sopenharmony_ci{ 14658c2ecf20Sopenharmony_ci struct dirent *events_ent; 14668c2ecf20Sopenharmony_ci DIR *events_dir; 14678c2ecf20Sopenharmony_ci int cnt = 0; 14688c2ecf20Sopenharmony_ci 14698c2ecf20Sopenharmony_ci events_dir = tracing_events__opendir(); 14708c2ecf20Sopenharmony_ci 14718c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("Can't open events dir", events_dir); 14728c2ecf20Sopenharmony_ci 14738c2ecf20Sopenharmony_ci while ((events_ent = readdir(events_dir))) { 14748c2ecf20Sopenharmony_ci char *sys_path; 14758c2ecf20Sopenharmony_ci struct dirent *sys_ent; 14768c2ecf20Sopenharmony_ci DIR *sys_dir; 14778c2ecf20Sopenharmony_ci 14788c2ecf20Sopenharmony_ci if (!strcmp(events_ent->d_name, ".") 14798c2ecf20Sopenharmony_ci || !strcmp(events_ent->d_name, "..") 14808c2ecf20Sopenharmony_ci || !strcmp(events_ent->d_name, "enable") 14818c2ecf20Sopenharmony_ci || !strcmp(events_ent->d_name, "header_event") 14828c2ecf20Sopenharmony_ci || !strcmp(events_ent->d_name, "header_page")) 14838c2ecf20Sopenharmony_ci continue; 14848c2ecf20Sopenharmony_ci 14858c2ecf20Sopenharmony_ci sys_path = get_events_file(events_ent->d_name); 14868c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("Can't get sys path", sys_path); 14878c2ecf20Sopenharmony_ci 14888c2ecf20Sopenharmony_ci sys_dir = opendir(sys_path); 14898c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("Can't open sys dir", sys_dir); 14908c2ecf20Sopenharmony_ci 14918c2ecf20Sopenharmony_ci while ((sys_ent = readdir(sys_dir))) { 14928c2ecf20Sopenharmony_ci if (!strcmp(sys_ent->d_name, ".") 14938c2ecf20Sopenharmony_ci || !strcmp(sys_ent->d_name, "..") 14948c2ecf20Sopenharmony_ci || !strcmp(sys_ent->d_name, "enable") 14958c2ecf20Sopenharmony_ci || !strcmp(sys_ent->d_name, "filter")) 14968c2ecf20Sopenharmony_ci continue; 14978c2ecf20Sopenharmony_ci 14988c2ecf20Sopenharmony_ci cnt++; 14998c2ecf20Sopenharmony_ci } 15008c2ecf20Sopenharmony_ci 15018c2ecf20Sopenharmony_ci closedir(sys_dir); 15028c2ecf20Sopenharmony_ci put_events_file(sys_path); 15038c2ecf20Sopenharmony_ci } 15048c2ecf20Sopenharmony_ci 15058c2ecf20Sopenharmony_ci closedir(events_dir); 15068c2ecf20Sopenharmony_ci return cnt; 15078c2ecf20Sopenharmony_ci} 15088c2ecf20Sopenharmony_ci 15098c2ecf20Sopenharmony_cistatic int test__all_tracepoints(struct evlist *evlist) 15108c2ecf20Sopenharmony_ci{ 15118c2ecf20Sopenharmony_ci TEST_ASSERT_VAL("wrong events count", 15128c2ecf20Sopenharmony_ci count_tracepoints() == evlist->core.nr_entries); 15138c2ecf20Sopenharmony_ci 15148c2ecf20Sopenharmony_ci return test__checkevent_tracepoint_multi(evlist); 15158c2ecf20Sopenharmony_ci} 15168c2ecf20Sopenharmony_ci 15178c2ecf20Sopenharmony_cistruct evlist_test { 15188c2ecf20Sopenharmony_ci const char *name; 15198c2ecf20Sopenharmony_ci __u32 type; 15208c2ecf20Sopenharmony_ci const int id; 15218c2ecf20Sopenharmony_ci bool (*valid)(void); 15228c2ecf20Sopenharmony_ci int (*check)(struct evlist *evlist); 15238c2ecf20Sopenharmony_ci}; 15248c2ecf20Sopenharmony_ci 15258c2ecf20Sopenharmony_cistatic struct evlist_test test__events[] = { 15268c2ecf20Sopenharmony_ci { 15278c2ecf20Sopenharmony_ci .name = "syscalls:sys_enter_openat", 15288c2ecf20Sopenharmony_ci .check = test__checkevent_tracepoint, 15298c2ecf20Sopenharmony_ci .id = 0, 15308c2ecf20Sopenharmony_ci }, 15318c2ecf20Sopenharmony_ci { 15328c2ecf20Sopenharmony_ci .name = "syscalls:*", 15338c2ecf20Sopenharmony_ci .check = test__checkevent_tracepoint_multi, 15348c2ecf20Sopenharmony_ci .id = 1, 15358c2ecf20Sopenharmony_ci }, 15368c2ecf20Sopenharmony_ci { 15378c2ecf20Sopenharmony_ci .name = "r1a", 15388c2ecf20Sopenharmony_ci .check = test__checkevent_raw, 15398c2ecf20Sopenharmony_ci .id = 2, 15408c2ecf20Sopenharmony_ci }, 15418c2ecf20Sopenharmony_ci { 15428c2ecf20Sopenharmony_ci .name = "1:1", 15438c2ecf20Sopenharmony_ci .check = test__checkevent_numeric, 15448c2ecf20Sopenharmony_ci .id = 3, 15458c2ecf20Sopenharmony_ci }, 15468c2ecf20Sopenharmony_ci { 15478c2ecf20Sopenharmony_ci .name = "instructions", 15488c2ecf20Sopenharmony_ci .check = test__checkevent_symbolic_name, 15498c2ecf20Sopenharmony_ci .id = 4, 15508c2ecf20Sopenharmony_ci }, 15518c2ecf20Sopenharmony_ci { 15528c2ecf20Sopenharmony_ci .name = "cycles/period=100000,config2/", 15538c2ecf20Sopenharmony_ci .check = test__checkevent_symbolic_name_config, 15548c2ecf20Sopenharmony_ci .id = 5, 15558c2ecf20Sopenharmony_ci }, 15568c2ecf20Sopenharmony_ci { 15578c2ecf20Sopenharmony_ci .name = "faults", 15588c2ecf20Sopenharmony_ci .check = test__checkevent_symbolic_alias, 15598c2ecf20Sopenharmony_ci .id = 6, 15608c2ecf20Sopenharmony_ci }, 15618c2ecf20Sopenharmony_ci { 15628c2ecf20Sopenharmony_ci .name = "L1-dcache-load-miss", 15638c2ecf20Sopenharmony_ci .check = test__checkevent_genhw, 15648c2ecf20Sopenharmony_ci .id = 7, 15658c2ecf20Sopenharmony_ci }, 15668c2ecf20Sopenharmony_ci { 15678c2ecf20Sopenharmony_ci .name = "mem:0", 15688c2ecf20Sopenharmony_ci .check = test__checkevent_breakpoint, 15698c2ecf20Sopenharmony_ci .id = 8, 15708c2ecf20Sopenharmony_ci }, 15718c2ecf20Sopenharmony_ci { 15728c2ecf20Sopenharmony_ci .name = "mem:0:x", 15738c2ecf20Sopenharmony_ci .check = test__checkevent_breakpoint_x, 15748c2ecf20Sopenharmony_ci .id = 9, 15758c2ecf20Sopenharmony_ci }, 15768c2ecf20Sopenharmony_ci { 15778c2ecf20Sopenharmony_ci .name = "mem:0:r", 15788c2ecf20Sopenharmony_ci .check = test__checkevent_breakpoint_r, 15798c2ecf20Sopenharmony_ci .id = 10, 15808c2ecf20Sopenharmony_ci }, 15818c2ecf20Sopenharmony_ci { 15828c2ecf20Sopenharmony_ci .name = "mem:0:w", 15838c2ecf20Sopenharmony_ci .check = test__checkevent_breakpoint_w, 15848c2ecf20Sopenharmony_ci .id = 11, 15858c2ecf20Sopenharmony_ci }, 15868c2ecf20Sopenharmony_ci { 15878c2ecf20Sopenharmony_ci .name = "syscalls:sys_enter_openat:k", 15888c2ecf20Sopenharmony_ci .check = test__checkevent_tracepoint_modifier, 15898c2ecf20Sopenharmony_ci .id = 12, 15908c2ecf20Sopenharmony_ci }, 15918c2ecf20Sopenharmony_ci { 15928c2ecf20Sopenharmony_ci .name = "syscalls:*:u", 15938c2ecf20Sopenharmony_ci .check = test__checkevent_tracepoint_multi_modifier, 15948c2ecf20Sopenharmony_ci .id = 13, 15958c2ecf20Sopenharmony_ci }, 15968c2ecf20Sopenharmony_ci { 15978c2ecf20Sopenharmony_ci .name = "r1a:kp", 15988c2ecf20Sopenharmony_ci .check = test__checkevent_raw_modifier, 15998c2ecf20Sopenharmony_ci .id = 14, 16008c2ecf20Sopenharmony_ci }, 16018c2ecf20Sopenharmony_ci { 16028c2ecf20Sopenharmony_ci .name = "1:1:hp", 16038c2ecf20Sopenharmony_ci .check = test__checkevent_numeric_modifier, 16048c2ecf20Sopenharmony_ci .id = 15, 16058c2ecf20Sopenharmony_ci }, 16068c2ecf20Sopenharmony_ci { 16078c2ecf20Sopenharmony_ci .name = "instructions:h", 16088c2ecf20Sopenharmony_ci .check = test__checkevent_symbolic_name_modifier, 16098c2ecf20Sopenharmony_ci .id = 16, 16108c2ecf20Sopenharmony_ci }, 16118c2ecf20Sopenharmony_ci { 16128c2ecf20Sopenharmony_ci .name = "faults:u", 16138c2ecf20Sopenharmony_ci .check = test__checkevent_symbolic_alias_modifier, 16148c2ecf20Sopenharmony_ci .id = 17, 16158c2ecf20Sopenharmony_ci }, 16168c2ecf20Sopenharmony_ci { 16178c2ecf20Sopenharmony_ci .name = "L1-dcache-load-miss:kp", 16188c2ecf20Sopenharmony_ci .check = test__checkevent_genhw_modifier, 16198c2ecf20Sopenharmony_ci .id = 18, 16208c2ecf20Sopenharmony_ci }, 16218c2ecf20Sopenharmony_ci { 16228c2ecf20Sopenharmony_ci .name = "mem:0:u", 16238c2ecf20Sopenharmony_ci .check = test__checkevent_breakpoint_modifier, 16248c2ecf20Sopenharmony_ci .id = 19, 16258c2ecf20Sopenharmony_ci }, 16268c2ecf20Sopenharmony_ci { 16278c2ecf20Sopenharmony_ci .name = "mem:0:x:k", 16288c2ecf20Sopenharmony_ci .check = test__checkevent_breakpoint_x_modifier, 16298c2ecf20Sopenharmony_ci .id = 20, 16308c2ecf20Sopenharmony_ci }, 16318c2ecf20Sopenharmony_ci { 16328c2ecf20Sopenharmony_ci .name = "mem:0:r:hp", 16338c2ecf20Sopenharmony_ci .check = test__checkevent_breakpoint_r_modifier, 16348c2ecf20Sopenharmony_ci .id = 21, 16358c2ecf20Sopenharmony_ci }, 16368c2ecf20Sopenharmony_ci { 16378c2ecf20Sopenharmony_ci .name = "mem:0:w:up", 16388c2ecf20Sopenharmony_ci .check = test__checkevent_breakpoint_w_modifier, 16398c2ecf20Sopenharmony_ci .id = 22, 16408c2ecf20Sopenharmony_ci }, 16418c2ecf20Sopenharmony_ci { 16428c2ecf20Sopenharmony_ci .name = "r1,syscalls:sys_enter_openat:k,1:1:hp", 16438c2ecf20Sopenharmony_ci .check = test__checkevent_list, 16448c2ecf20Sopenharmony_ci .id = 23, 16458c2ecf20Sopenharmony_ci }, 16468c2ecf20Sopenharmony_ci { 16478c2ecf20Sopenharmony_ci .name = "instructions:G", 16488c2ecf20Sopenharmony_ci .check = test__checkevent_exclude_host_modifier, 16498c2ecf20Sopenharmony_ci .id = 24, 16508c2ecf20Sopenharmony_ci }, 16518c2ecf20Sopenharmony_ci { 16528c2ecf20Sopenharmony_ci .name = "instructions:H", 16538c2ecf20Sopenharmony_ci .check = test__checkevent_exclude_guest_modifier, 16548c2ecf20Sopenharmony_ci .id = 25, 16558c2ecf20Sopenharmony_ci }, 16568c2ecf20Sopenharmony_ci { 16578c2ecf20Sopenharmony_ci .name = "mem:0:rw", 16588c2ecf20Sopenharmony_ci .check = test__checkevent_breakpoint_rw, 16598c2ecf20Sopenharmony_ci .id = 26, 16608c2ecf20Sopenharmony_ci }, 16618c2ecf20Sopenharmony_ci { 16628c2ecf20Sopenharmony_ci .name = "mem:0:rw:kp", 16638c2ecf20Sopenharmony_ci .check = test__checkevent_breakpoint_rw_modifier, 16648c2ecf20Sopenharmony_ci .id = 27, 16658c2ecf20Sopenharmony_ci }, 16668c2ecf20Sopenharmony_ci { 16678c2ecf20Sopenharmony_ci .name = "{instructions:k,cycles:upp}", 16688c2ecf20Sopenharmony_ci .check = test__group1, 16698c2ecf20Sopenharmony_ci .id = 28, 16708c2ecf20Sopenharmony_ci }, 16718c2ecf20Sopenharmony_ci { 16728c2ecf20Sopenharmony_ci .name = "{faults:k,cache-references}:u,cycles:k", 16738c2ecf20Sopenharmony_ci .check = test__group2, 16748c2ecf20Sopenharmony_ci .id = 29, 16758c2ecf20Sopenharmony_ci }, 16768c2ecf20Sopenharmony_ci { 16778c2ecf20Sopenharmony_ci .name = "group1{syscalls:sys_enter_openat:H,cycles:kppp},group2{cycles,1:3}:G,instructions:u", 16788c2ecf20Sopenharmony_ci .check = test__group3, 16798c2ecf20Sopenharmony_ci .id = 30, 16808c2ecf20Sopenharmony_ci }, 16818c2ecf20Sopenharmony_ci { 16828c2ecf20Sopenharmony_ci .name = "{cycles:u,instructions:kp}:p", 16838c2ecf20Sopenharmony_ci .check = test__group4, 16848c2ecf20Sopenharmony_ci .id = 31, 16858c2ecf20Sopenharmony_ci }, 16868c2ecf20Sopenharmony_ci { 16878c2ecf20Sopenharmony_ci .name = "{cycles,instructions}:G,{cycles:G,instructions:G},cycles", 16888c2ecf20Sopenharmony_ci .check = test__group5, 16898c2ecf20Sopenharmony_ci .id = 32, 16908c2ecf20Sopenharmony_ci }, 16918c2ecf20Sopenharmony_ci { 16928c2ecf20Sopenharmony_ci .name = "*:*", 16938c2ecf20Sopenharmony_ci .check = test__all_tracepoints, 16948c2ecf20Sopenharmony_ci .id = 33, 16958c2ecf20Sopenharmony_ci }, 16968c2ecf20Sopenharmony_ci { 16978c2ecf20Sopenharmony_ci .name = "{cycles,cache-misses:G}:H", 16988c2ecf20Sopenharmony_ci .check = test__group_gh1, 16998c2ecf20Sopenharmony_ci .id = 34, 17008c2ecf20Sopenharmony_ci }, 17018c2ecf20Sopenharmony_ci { 17028c2ecf20Sopenharmony_ci .name = "{cycles,cache-misses:H}:G", 17038c2ecf20Sopenharmony_ci .check = test__group_gh2, 17048c2ecf20Sopenharmony_ci .id = 35, 17058c2ecf20Sopenharmony_ci }, 17068c2ecf20Sopenharmony_ci { 17078c2ecf20Sopenharmony_ci .name = "{cycles:G,cache-misses:H}:u", 17088c2ecf20Sopenharmony_ci .check = test__group_gh3, 17098c2ecf20Sopenharmony_ci .id = 36, 17108c2ecf20Sopenharmony_ci }, 17118c2ecf20Sopenharmony_ci { 17128c2ecf20Sopenharmony_ci .name = "{cycles:G,cache-misses:H}:uG", 17138c2ecf20Sopenharmony_ci .check = test__group_gh4, 17148c2ecf20Sopenharmony_ci .id = 37, 17158c2ecf20Sopenharmony_ci }, 17168c2ecf20Sopenharmony_ci { 17178c2ecf20Sopenharmony_ci .name = "{cycles,cache-misses,branch-misses}:S", 17188c2ecf20Sopenharmony_ci .check = test__leader_sample1, 17198c2ecf20Sopenharmony_ci .id = 38, 17208c2ecf20Sopenharmony_ci }, 17218c2ecf20Sopenharmony_ci { 17228c2ecf20Sopenharmony_ci .name = "{instructions,branch-misses}:Su", 17238c2ecf20Sopenharmony_ci .check = test__leader_sample2, 17248c2ecf20Sopenharmony_ci .id = 39, 17258c2ecf20Sopenharmony_ci }, 17268c2ecf20Sopenharmony_ci { 17278c2ecf20Sopenharmony_ci .name = "instructions:uDp", 17288c2ecf20Sopenharmony_ci .check = test__checkevent_pinned_modifier, 17298c2ecf20Sopenharmony_ci .id = 40, 17308c2ecf20Sopenharmony_ci }, 17318c2ecf20Sopenharmony_ci { 17328c2ecf20Sopenharmony_ci .name = "{cycles,cache-misses,branch-misses}:D", 17338c2ecf20Sopenharmony_ci .check = test__pinned_group, 17348c2ecf20Sopenharmony_ci .id = 41, 17358c2ecf20Sopenharmony_ci }, 17368c2ecf20Sopenharmony_ci { 17378c2ecf20Sopenharmony_ci .name = "mem:0/1", 17388c2ecf20Sopenharmony_ci .check = test__checkevent_breakpoint_len, 17398c2ecf20Sopenharmony_ci .id = 42, 17408c2ecf20Sopenharmony_ci }, 17418c2ecf20Sopenharmony_ci { 17428c2ecf20Sopenharmony_ci .name = "mem:0/2:w", 17438c2ecf20Sopenharmony_ci .check = test__checkevent_breakpoint_len_w, 17448c2ecf20Sopenharmony_ci .id = 43, 17458c2ecf20Sopenharmony_ci }, 17468c2ecf20Sopenharmony_ci { 17478c2ecf20Sopenharmony_ci .name = "mem:0/4:rw:u", 17488c2ecf20Sopenharmony_ci .check = test__checkevent_breakpoint_len_rw_modifier, 17498c2ecf20Sopenharmony_ci .id = 44 17508c2ecf20Sopenharmony_ci }, 17518c2ecf20Sopenharmony_ci#if defined(__s390x__) 17528c2ecf20Sopenharmony_ci { 17538c2ecf20Sopenharmony_ci .name = "kvm-s390:kvm_s390_create_vm", 17548c2ecf20Sopenharmony_ci .check = test__checkevent_tracepoint, 17558c2ecf20Sopenharmony_ci .valid = kvm_s390_create_vm_valid, 17568c2ecf20Sopenharmony_ci .id = 100, 17578c2ecf20Sopenharmony_ci }, 17588c2ecf20Sopenharmony_ci#endif 17598c2ecf20Sopenharmony_ci { 17608c2ecf20Sopenharmony_ci .name = "instructions:I", 17618c2ecf20Sopenharmony_ci .check = test__checkevent_exclude_idle_modifier, 17628c2ecf20Sopenharmony_ci .id = 45, 17638c2ecf20Sopenharmony_ci }, 17648c2ecf20Sopenharmony_ci { 17658c2ecf20Sopenharmony_ci .name = "instructions:kIG", 17668c2ecf20Sopenharmony_ci .check = test__checkevent_exclude_idle_modifier_1, 17678c2ecf20Sopenharmony_ci .id = 46, 17688c2ecf20Sopenharmony_ci }, 17698c2ecf20Sopenharmony_ci { 17708c2ecf20Sopenharmony_ci .name = "task-clock:P,cycles", 17718c2ecf20Sopenharmony_ci .check = test__checkevent_precise_max_modifier, 17728c2ecf20Sopenharmony_ci .id = 47, 17738c2ecf20Sopenharmony_ci }, 17748c2ecf20Sopenharmony_ci { 17758c2ecf20Sopenharmony_ci .name = "instructions/name=insn/", 17768c2ecf20Sopenharmony_ci .check = test__checkevent_config_symbol, 17778c2ecf20Sopenharmony_ci .id = 48, 17788c2ecf20Sopenharmony_ci }, 17798c2ecf20Sopenharmony_ci { 17808c2ecf20Sopenharmony_ci .name = "r1234/name=rawpmu/", 17818c2ecf20Sopenharmony_ci .check = test__checkevent_config_raw, 17828c2ecf20Sopenharmony_ci .id = 49, 17838c2ecf20Sopenharmony_ci }, 17848c2ecf20Sopenharmony_ci { 17858c2ecf20Sopenharmony_ci .name = "4:0x6530160/name=numpmu/", 17868c2ecf20Sopenharmony_ci .check = test__checkevent_config_num, 17878c2ecf20Sopenharmony_ci .id = 50, 17888c2ecf20Sopenharmony_ci }, 17898c2ecf20Sopenharmony_ci { 17908c2ecf20Sopenharmony_ci .name = "L1-dcache-misses/name=cachepmu/", 17918c2ecf20Sopenharmony_ci .check = test__checkevent_config_cache, 17928c2ecf20Sopenharmony_ci .id = 51, 17938c2ecf20Sopenharmony_ci }, 17948c2ecf20Sopenharmony_ci { 17958c2ecf20Sopenharmony_ci .name = "intel_pt//u", 17968c2ecf20Sopenharmony_ci .valid = test__intel_pt_valid, 17978c2ecf20Sopenharmony_ci .check = test__intel_pt, 17988c2ecf20Sopenharmony_ci .id = 52, 17998c2ecf20Sopenharmony_ci }, 18008c2ecf20Sopenharmony_ci { 18018c2ecf20Sopenharmony_ci .name = "cycles/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks'/Duk", 18028c2ecf20Sopenharmony_ci .check = test__checkevent_complex_name, 18038c2ecf20Sopenharmony_ci .id = 53 18048c2ecf20Sopenharmony_ci }, 18058c2ecf20Sopenharmony_ci { 18068c2ecf20Sopenharmony_ci .name = "cycles//u", 18078c2ecf20Sopenharmony_ci .check = test__sym_event_slash, 18088c2ecf20Sopenharmony_ci .id = 54, 18098c2ecf20Sopenharmony_ci }, 18108c2ecf20Sopenharmony_ci { 18118c2ecf20Sopenharmony_ci .name = "cycles:k", 18128c2ecf20Sopenharmony_ci .check = test__sym_event_dc, 18138c2ecf20Sopenharmony_ci .id = 55, 18148c2ecf20Sopenharmony_ci }, 18158c2ecf20Sopenharmony_ci { 18168c2ecf20Sopenharmony_ci .name = "instructions:uep", 18178c2ecf20Sopenharmony_ci .check = test__checkevent_exclusive_modifier, 18188c2ecf20Sopenharmony_ci .id = 56, 18198c2ecf20Sopenharmony_ci }, 18208c2ecf20Sopenharmony_ci { 18218c2ecf20Sopenharmony_ci .name = "{cycles,cache-misses,branch-misses}:e", 18228c2ecf20Sopenharmony_ci .check = test__exclusive_group, 18238c2ecf20Sopenharmony_ci .id = 57, 18248c2ecf20Sopenharmony_ci }, 18258c2ecf20Sopenharmony_ci}; 18268c2ecf20Sopenharmony_ci 18278c2ecf20Sopenharmony_cistatic struct evlist_test test__events_pmu[] = { 18288c2ecf20Sopenharmony_ci { 18298c2ecf20Sopenharmony_ci .name = "cpu/config=10,config1,config2=3,period=1000/u", 18308c2ecf20Sopenharmony_ci .check = test__checkevent_pmu, 18318c2ecf20Sopenharmony_ci .id = 0, 18328c2ecf20Sopenharmony_ci }, 18338c2ecf20Sopenharmony_ci { 18348c2ecf20Sopenharmony_ci .name = "cpu/config=1,name=krava/u,cpu/config=2/u", 18358c2ecf20Sopenharmony_ci .check = test__checkevent_pmu_name, 18368c2ecf20Sopenharmony_ci .id = 1, 18378c2ecf20Sopenharmony_ci }, 18388c2ecf20Sopenharmony_ci { 18398c2ecf20Sopenharmony_ci .name = "cpu/config=1,call-graph=fp,time,period=100000/,cpu/config=2,call-graph=no,time=0,period=2000/", 18408c2ecf20Sopenharmony_ci .check = test__checkevent_pmu_partial_time_callgraph, 18418c2ecf20Sopenharmony_ci .id = 2, 18428c2ecf20Sopenharmony_ci }, 18438c2ecf20Sopenharmony_ci { 18448c2ecf20Sopenharmony_ci .name = "cpu/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks',period=0x1,event=0x2/ukp", 18458c2ecf20Sopenharmony_ci .check = test__checkevent_complex_name, 18468c2ecf20Sopenharmony_ci .id = 3, 18478c2ecf20Sopenharmony_ci }, 18488c2ecf20Sopenharmony_ci { 18498c2ecf20Sopenharmony_ci .name = "software/r1a/", 18508c2ecf20Sopenharmony_ci .check = test__checkevent_raw_pmu, 18518c2ecf20Sopenharmony_ci .id = 4, 18528c2ecf20Sopenharmony_ci }, 18538c2ecf20Sopenharmony_ci { 18548c2ecf20Sopenharmony_ci .name = "software/r0x1a/", 18558c2ecf20Sopenharmony_ci .check = test__checkevent_raw_pmu, 18568c2ecf20Sopenharmony_ci .id = 4, 18578c2ecf20Sopenharmony_ci }, 18588c2ecf20Sopenharmony_ci}; 18598c2ecf20Sopenharmony_ci 18608c2ecf20Sopenharmony_cistruct terms_test { 18618c2ecf20Sopenharmony_ci const char *str; 18628c2ecf20Sopenharmony_ci __u32 type; 18638c2ecf20Sopenharmony_ci int (*check)(struct list_head *terms); 18648c2ecf20Sopenharmony_ci}; 18658c2ecf20Sopenharmony_ci 18668c2ecf20Sopenharmony_cistatic struct terms_test test__terms[] = { 18678c2ecf20Sopenharmony_ci [0] = { 18688c2ecf20Sopenharmony_ci .str = "config=10,config1,config2=3,umask=1,read,r0xead", 18698c2ecf20Sopenharmony_ci .check = test__checkterms_simple, 18708c2ecf20Sopenharmony_ci }, 18718c2ecf20Sopenharmony_ci}; 18728c2ecf20Sopenharmony_ci 18738c2ecf20Sopenharmony_cistatic int test_event(struct evlist_test *e) 18748c2ecf20Sopenharmony_ci{ 18758c2ecf20Sopenharmony_ci struct parse_events_error err; 18768c2ecf20Sopenharmony_ci struct evlist *evlist; 18778c2ecf20Sopenharmony_ci int ret; 18788c2ecf20Sopenharmony_ci 18798c2ecf20Sopenharmony_ci bzero(&err, sizeof(err)); 18808c2ecf20Sopenharmony_ci if (e->valid && !e->valid()) { 18818c2ecf20Sopenharmony_ci pr_debug("... SKIP"); 18828c2ecf20Sopenharmony_ci return 0; 18838c2ecf20Sopenharmony_ci } 18848c2ecf20Sopenharmony_ci 18858c2ecf20Sopenharmony_ci evlist = evlist__new(); 18868c2ecf20Sopenharmony_ci if (evlist == NULL) 18878c2ecf20Sopenharmony_ci return -ENOMEM; 18888c2ecf20Sopenharmony_ci 18898c2ecf20Sopenharmony_ci ret = parse_events(evlist, e->name, &err); 18908c2ecf20Sopenharmony_ci if (ret) { 18918c2ecf20Sopenharmony_ci pr_debug("failed to parse event '%s', err %d, str '%s'\n", 18928c2ecf20Sopenharmony_ci e->name, ret, err.str); 18938c2ecf20Sopenharmony_ci parse_events_print_error(&err, e->name); 18948c2ecf20Sopenharmony_ci } else { 18958c2ecf20Sopenharmony_ci ret = e->check(evlist); 18968c2ecf20Sopenharmony_ci } 18978c2ecf20Sopenharmony_ci 18988c2ecf20Sopenharmony_ci evlist__delete(evlist); 18998c2ecf20Sopenharmony_ci 19008c2ecf20Sopenharmony_ci return ret; 19018c2ecf20Sopenharmony_ci} 19028c2ecf20Sopenharmony_ci 19038c2ecf20Sopenharmony_cistatic int test_events(struct evlist_test *events, unsigned cnt) 19048c2ecf20Sopenharmony_ci{ 19058c2ecf20Sopenharmony_ci int ret1, ret2 = 0; 19068c2ecf20Sopenharmony_ci unsigned i; 19078c2ecf20Sopenharmony_ci 19088c2ecf20Sopenharmony_ci for (i = 0; i < cnt; i++) { 19098c2ecf20Sopenharmony_ci struct evlist_test *e = &events[i]; 19108c2ecf20Sopenharmony_ci 19118c2ecf20Sopenharmony_ci pr_debug("running test %d '%s'", e->id, e->name); 19128c2ecf20Sopenharmony_ci ret1 = test_event(e); 19138c2ecf20Sopenharmony_ci if (ret1) 19148c2ecf20Sopenharmony_ci ret2 = ret1; 19158c2ecf20Sopenharmony_ci pr_debug("\n"); 19168c2ecf20Sopenharmony_ci } 19178c2ecf20Sopenharmony_ci 19188c2ecf20Sopenharmony_ci return ret2; 19198c2ecf20Sopenharmony_ci} 19208c2ecf20Sopenharmony_ci 19218c2ecf20Sopenharmony_cistatic int test_term(struct terms_test *t) 19228c2ecf20Sopenharmony_ci{ 19238c2ecf20Sopenharmony_ci struct list_head terms; 19248c2ecf20Sopenharmony_ci int ret; 19258c2ecf20Sopenharmony_ci 19268c2ecf20Sopenharmony_ci INIT_LIST_HEAD(&terms); 19278c2ecf20Sopenharmony_ci 19288c2ecf20Sopenharmony_ci /* 19298c2ecf20Sopenharmony_ci * The perf_pmu__test_parse_init prepares perf_pmu_events_list 19308c2ecf20Sopenharmony_ci * which gets freed in parse_events_terms. 19318c2ecf20Sopenharmony_ci */ 19328c2ecf20Sopenharmony_ci if (perf_pmu__test_parse_init()) 19338c2ecf20Sopenharmony_ci return -1; 19348c2ecf20Sopenharmony_ci 19358c2ecf20Sopenharmony_ci ret = parse_events_terms(&terms, t->str); 19368c2ecf20Sopenharmony_ci if (ret) { 19378c2ecf20Sopenharmony_ci pr_debug("failed to parse terms '%s', err %d\n", 19388c2ecf20Sopenharmony_ci t->str , ret); 19398c2ecf20Sopenharmony_ci return ret; 19408c2ecf20Sopenharmony_ci } 19418c2ecf20Sopenharmony_ci 19428c2ecf20Sopenharmony_ci ret = t->check(&terms); 19438c2ecf20Sopenharmony_ci parse_events_terms__purge(&terms); 19448c2ecf20Sopenharmony_ci 19458c2ecf20Sopenharmony_ci return ret; 19468c2ecf20Sopenharmony_ci} 19478c2ecf20Sopenharmony_ci 19488c2ecf20Sopenharmony_cistatic int test_terms(struct terms_test *terms, unsigned cnt) 19498c2ecf20Sopenharmony_ci{ 19508c2ecf20Sopenharmony_ci int ret = 0; 19518c2ecf20Sopenharmony_ci unsigned i; 19528c2ecf20Sopenharmony_ci 19538c2ecf20Sopenharmony_ci for (i = 0; i < cnt; i++) { 19548c2ecf20Sopenharmony_ci struct terms_test *t = &terms[i]; 19558c2ecf20Sopenharmony_ci 19568c2ecf20Sopenharmony_ci pr_debug("running test %d '%s'\n", i, t->str); 19578c2ecf20Sopenharmony_ci ret = test_term(t); 19588c2ecf20Sopenharmony_ci if (ret) 19598c2ecf20Sopenharmony_ci break; 19608c2ecf20Sopenharmony_ci } 19618c2ecf20Sopenharmony_ci 19628c2ecf20Sopenharmony_ci return ret; 19638c2ecf20Sopenharmony_ci} 19648c2ecf20Sopenharmony_ci 19658c2ecf20Sopenharmony_cistatic int test_pmu(void) 19668c2ecf20Sopenharmony_ci{ 19678c2ecf20Sopenharmony_ci struct stat st; 19688c2ecf20Sopenharmony_ci char path[PATH_MAX]; 19698c2ecf20Sopenharmony_ci int ret; 19708c2ecf20Sopenharmony_ci 19718c2ecf20Sopenharmony_ci snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/format/", 19728c2ecf20Sopenharmony_ci sysfs__mountpoint()); 19738c2ecf20Sopenharmony_ci 19748c2ecf20Sopenharmony_ci ret = stat(path, &st); 19758c2ecf20Sopenharmony_ci if (ret) 19768c2ecf20Sopenharmony_ci pr_debug("omitting PMU cpu tests\n"); 19778c2ecf20Sopenharmony_ci return !ret; 19788c2ecf20Sopenharmony_ci} 19798c2ecf20Sopenharmony_ci 19808c2ecf20Sopenharmony_cistatic int test_pmu_events(void) 19818c2ecf20Sopenharmony_ci{ 19828c2ecf20Sopenharmony_ci struct stat st; 19838c2ecf20Sopenharmony_ci char path[PATH_MAX]; 19848c2ecf20Sopenharmony_ci struct dirent *ent; 19858c2ecf20Sopenharmony_ci DIR *dir; 19868c2ecf20Sopenharmony_ci int ret; 19878c2ecf20Sopenharmony_ci 19888c2ecf20Sopenharmony_ci snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/events/", 19898c2ecf20Sopenharmony_ci sysfs__mountpoint()); 19908c2ecf20Sopenharmony_ci 19918c2ecf20Sopenharmony_ci ret = stat(path, &st); 19928c2ecf20Sopenharmony_ci if (ret) { 19938c2ecf20Sopenharmony_ci pr_debug("omitting PMU cpu events tests\n"); 19948c2ecf20Sopenharmony_ci return 0; 19958c2ecf20Sopenharmony_ci } 19968c2ecf20Sopenharmony_ci 19978c2ecf20Sopenharmony_ci dir = opendir(path); 19988c2ecf20Sopenharmony_ci if (!dir) { 19998c2ecf20Sopenharmony_ci pr_debug("can't open pmu event dir"); 20008c2ecf20Sopenharmony_ci return -1; 20018c2ecf20Sopenharmony_ci } 20028c2ecf20Sopenharmony_ci 20038c2ecf20Sopenharmony_ci while (!ret && (ent = readdir(dir))) { 20048c2ecf20Sopenharmony_ci struct evlist_test e = { .id = 0, }; 20058c2ecf20Sopenharmony_ci char name[2 * NAME_MAX + 1 + 12 + 3]; 20068c2ecf20Sopenharmony_ci 20078c2ecf20Sopenharmony_ci /* Names containing . are special and cannot be used directly */ 20088c2ecf20Sopenharmony_ci if (strchr(ent->d_name, '.')) 20098c2ecf20Sopenharmony_ci continue; 20108c2ecf20Sopenharmony_ci 20118c2ecf20Sopenharmony_ci snprintf(name, sizeof(name), "cpu/event=%s/u", ent->d_name); 20128c2ecf20Sopenharmony_ci 20138c2ecf20Sopenharmony_ci e.name = name; 20148c2ecf20Sopenharmony_ci e.check = test__checkevent_pmu_events; 20158c2ecf20Sopenharmony_ci 20168c2ecf20Sopenharmony_ci ret = test_event(&e); 20178c2ecf20Sopenharmony_ci if (ret) 20188c2ecf20Sopenharmony_ci break; 20198c2ecf20Sopenharmony_ci snprintf(name, sizeof(name), "%s:u,cpu/event=%s/u", ent->d_name, ent->d_name); 20208c2ecf20Sopenharmony_ci e.name = name; 20218c2ecf20Sopenharmony_ci e.check = test__checkevent_pmu_events_mix; 20228c2ecf20Sopenharmony_ci ret = test_event(&e); 20238c2ecf20Sopenharmony_ci } 20248c2ecf20Sopenharmony_ci 20258c2ecf20Sopenharmony_ci closedir(dir); 20268c2ecf20Sopenharmony_ci return ret; 20278c2ecf20Sopenharmony_ci} 20288c2ecf20Sopenharmony_ci 20298c2ecf20Sopenharmony_ciint test__parse_events(struct test *test __maybe_unused, int subtest __maybe_unused) 20308c2ecf20Sopenharmony_ci{ 20318c2ecf20Sopenharmony_ci int ret1, ret2 = 0; 20328c2ecf20Sopenharmony_ci 20338c2ecf20Sopenharmony_ci#define TEST_EVENTS(tests) \ 20348c2ecf20Sopenharmony_cido { \ 20358c2ecf20Sopenharmony_ci ret1 = test_events(tests, ARRAY_SIZE(tests)); \ 20368c2ecf20Sopenharmony_ci if (!ret2) \ 20378c2ecf20Sopenharmony_ci ret2 = ret1; \ 20388c2ecf20Sopenharmony_ci} while (0) 20398c2ecf20Sopenharmony_ci 20408c2ecf20Sopenharmony_ci TEST_EVENTS(test__events); 20418c2ecf20Sopenharmony_ci 20428c2ecf20Sopenharmony_ci if (test_pmu()) 20438c2ecf20Sopenharmony_ci TEST_EVENTS(test__events_pmu); 20448c2ecf20Sopenharmony_ci 20458c2ecf20Sopenharmony_ci if (test_pmu()) { 20468c2ecf20Sopenharmony_ci int ret = test_pmu_events(); 20478c2ecf20Sopenharmony_ci if (ret) 20488c2ecf20Sopenharmony_ci return ret; 20498c2ecf20Sopenharmony_ci } 20508c2ecf20Sopenharmony_ci 20518c2ecf20Sopenharmony_ci ret1 = test_terms(test__terms, ARRAY_SIZE(test__terms)); 20528c2ecf20Sopenharmony_ci if (!ret2) 20538c2ecf20Sopenharmony_ci ret2 = ret1; 20548c2ecf20Sopenharmony_ci 20558c2ecf20Sopenharmony_ci return ret2; 20568c2ecf20Sopenharmony_ci} 2057