1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 2361c99a6SArnaldo Carvalho de Melo #ifndef __PERF_EVLIST_H 3361c99a6SArnaldo Carvalho de Melo #define __PERF_EVLIST_H 1 4361c99a6SArnaldo Carvalho de Melo 55c97cac6SArnaldo Carvalho de Melo #include <linux/compiler.h> 6877a7a11SArnaldo Carvalho de Melo #include <linux/kernel.h> 725a3720cSElena Reshetova #include <linux/refcount.h> 8361c99a6SArnaldo Carvalho de Melo #include <linux/list.h> 91b85337dSArnaldo Carvalho de Melo #include <api/fd/array.h> 1050d08e47SArnaldo Carvalho de Melo #include <stdio.h> 1170db7533SArnaldo Carvalho de Melo #include "../perf.h" 1204391debSArnaldo Carvalho de Melo #include "event.h" 130c21f736SArnaldo Carvalho de Melo #include "evsel.h" 1416958497SArnaldo Carvalho de Melo #include "mmap.h" 1550d08e47SArnaldo Carvalho de Melo #include "util.h" 169607ad3aSArnaldo Carvalho de Melo #include <signal.h> 1735b9d88eSArnaldo Carvalho de Melo #include <unistd.h> 18361c99a6SArnaldo Carvalho de Melo 195c581041SArnaldo Carvalho de Melo struct pollfd; 20f8a95309SArnaldo Carvalho de Melo struct thread_map; 21f854839bSJiri Olsa struct perf_cpu_map; 22b4006796SArnaldo Carvalho de Melo struct record_opts; 235c581041SArnaldo Carvalho de Melo 2470db7533SArnaldo Carvalho de Melo #define PERF_EVLIST__HLIST_BITS 8 2570db7533SArnaldo Carvalho de Melo #define PERF_EVLIST__HLIST_SIZE (1 << PERF_EVLIST__HLIST_BITS) 2670db7533SArnaldo Carvalho de Melo 2763503dbaSJiri Olsa struct evlist { 28361c99a6SArnaldo Carvalho de Melo struct list_head entries; 2970db7533SArnaldo Carvalho de Melo struct hlist_head heads[PERF_EVLIST__HLIST_SIZE]; 30361c99a6SArnaldo Carvalho de Melo int nr_entries; 3197f63e4aSNamhyung Kim int nr_groups; 32aece948fSArnaldo Carvalho de Melo int nr_mmaps; 332b56bcfbSArnaldo Carvalho de Melo bool enabled; 34ec9a77a7SAdrian Hunter bool has_user_cpus; 35994a1f78SJiri Olsa size_t mmap_len; 3675562573SAdrian Hunter int id_pos; 3775562573SAdrian Hunter int is_pos; 3875562573SAdrian Hunter u64 combined_sample_type; 3954cc54deSWang Nan enum bkw_mmap_state bkw_mmap_state; 4035b9d88eSArnaldo Carvalho de Melo struct { 4135b9d88eSArnaldo Carvalho de Melo int cork_fd; 4235b9d88eSArnaldo Carvalho de Melo pid_t pid; 4335b9d88eSArnaldo Carvalho de Melo } workload; 441b85337dSArnaldo Carvalho de Melo struct fdarray pollfd; 4570db7533SArnaldo Carvalho de Melo struct perf_mmap *mmap; 460b72d69aSWang Nan struct perf_mmap *overwrite_mmap; 479749b90eSJiri Olsa struct perf_thread_map *threads; 48f854839bSJiri Olsa struct perf_cpu_map *cpus; 4932dcd021SJiri Olsa struct evsel *selected; 5075be989aSArnaldo Carvalho de Melo struct events_stats stats; 512c07144dSKan Liang struct perf_env *env; 5263503dbaSJiri Olsa void (*trace_event_sample_raw)(struct evlist *evlist, 5393115d32SThomas Richter union perf_event *event, 5493115d32SThomas Richter struct perf_sample *sample); 556011518dSJin Yao u64 first_sample_time; 566011518dSJin Yao u64 last_sample_time; 57657ee553SSong Liu struct { 58657ee553SSong Liu pthread_t th; 59657ee553SSong Liu volatile int done; 60657ee553SSong Liu } thread; 61361c99a6SArnaldo Carvalho de Melo }; 62361c99a6SArnaldo Carvalho de Melo 6332dcd021SJiri Olsa struct evsel_str_handler { 64ee29be62SArnaldo Carvalho de Melo const char *name; 65ee29be62SArnaldo Carvalho de Melo void *handler; 66ee29be62SArnaldo Carvalho de Melo }; 67ee29be62SArnaldo Carvalho de Melo 680f98b11cSJiri Olsa struct evlist *evlist__new(void); 6963503dbaSJiri Olsa struct evlist *perf_evlist__new_default(void); 7063503dbaSJiri Olsa struct evlist *perf_evlist__new_dummy(void); 7152c86bcaSJiri Olsa void evlist__init(struct evlist *evlist, struct perf_cpu_map *cpus, 729749b90eSJiri Olsa struct perf_thread_map *threads); 7363503dbaSJiri Olsa void perf_evlist__exit(struct evlist *evlist); 74c12995a5SJiri Olsa void evlist__delete(struct evlist *evlist); 75361c99a6SArnaldo Carvalho de Melo 76a1cf3a75SJiri Olsa void evlist__add(struct evlist *evlist, struct evsel *entry); 7716251027SJiri Olsa void evlist__remove(struct evlist *evlist, struct evsel *evsel); 78db918acbSArnaldo Carvalho de Melo 7963503dbaSJiri Olsa int __perf_evlist__add_default(struct evlist *evlist, bool precise); 80db918acbSArnaldo Carvalho de Melo 8163503dbaSJiri Olsa static inline int perf_evlist__add_default(struct evlist *evlist) 82db918acbSArnaldo Carvalho de Melo { 83db918acbSArnaldo Carvalho de Melo return __perf_evlist__add_default(evlist, true); 84db918acbSArnaldo Carvalho de Melo } 85db918acbSArnaldo Carvalho de Melo 8663503dbaSJiri Olsa int __perf_evlist__add_default_attrs(struct evlist *evlist, 8779695e1bSArnaldo Carvalho de Melo struct perf_event_attr *attrs, size_t nr_attrs); 8850d08e47SArnaldo Carvalho de Melo 8979695e1bSArnaldo Carvalho de Melo #define perf_evlist__add_default_attrs(evlist, array) \ 9079695e1bSArnaldo Carvalho de Melo __perf_evlist__add_default_attrs(evlist, array, ARRAY_SIZE(array)) 91361c99a6SArnaldo Carvalho de Melo 9263503dbaSJiri Olsa int perf_evlist__add_dummy(struct evlist *evlist); 935bae0250SArnaldo Carvalho de Melo 9463503dbaSJiri Olsa int perf_evlist__add_sb_event(struct evlist **evlist, 95657ee553SSong Liu struct perf_event_attr *attr, 96657ee553SSong Liu perf_evsel__sb_cb_t cb, 97657ee553SSong Liu void *data); 9863503dbaSJiri Olsa int perf_evlist__start_sb_thread(struct evlist *evlist, 99657ee553SSong Liu struct target *target); 10063503dbaSJiri Olsa void perf_evlist__stop_sb_thread(struct evlist *evlist); 101657ee553SSong Liu 10263503dbaSJiri Olsa int perf_evlist__add_newtp(struct evlist *evlist, 10339876e7dSArnaldo Carvalho de Melo const char *sys, const char *name, void *handler); 10439876e7dSArnaldo Carvalho de Melo 10563503dbaSJiri Olsa void __perf_evlist__set_sample_bit(struct evlist *evlist, 10622c8a376SArnaldo Carvalho de Melo enum perf_event_sample_format bit); 10763503dbaSJiri Olsa void __perf_evlist__reset_sample_bit(struct evlist *evlist, 10822c8a376SArnaldo Carvalho de Melo enum perf_event_sample_format bit); 10922c8a376SArnaldo Carvalho de Melo 11022c8a376SArnaldo Carvalho de Melo #define perf_evlist__set_sample_bit(evlist, bit) \ 11122c8a376SArnaldo Carvalho de Melo __perf_evlist__set_sample_bit(evlist, PERF_SAMPLE_##bit) 11222c8a376SArnaldo Carvalho de Melo 11322c8a376SArnaldo Carvalho de Melo #define perf_evlist__reset_sample_bit(evlist, bit) \ 11422c8a376SArnaldo Carvalho de Melo __perf_evlist__reset_sample_bit(evlist, PERF_SAMPLE_##bit) 11522c8a376SArnaldo Carvalho de Melo 11663503dbaSJiri Olsa int perf_evlist__set_tp_filter(struct evlist *evlist, const char *filter); 11763503dbaSJiri Olsa int perf_evlist__set_tp_filter_pid(struct evlist *evlist, pid_t pid); 11863503dbaSJiri Olsa int perf_evlist__set_tp_filter_pids(struct evlist *evlist, size_t npids, pid_t *pids); 119745cefc5SArnaldo Carvalho de Melo 12032dcd021SJiri Olsa struct evsel * 12163503dbaSJiri Olsa perf_evlist__find_tracepoint_by_id(struct evlist *evlist, int id); 122da378962SArnaldo Carvalho de Melo 12332dcd021SJiri Olsa struct evsel * 12463503dbaSJiri Olsa perf_evlist__find_tracepoint_by_name(struct evlist *evlist, 125a2f2804aSDavid Ahern const char *name); 126a2f2804aSDavid Ahern 12763503dbaSJiri Olsa void perf_evlist__id_add(struct evlist *evlist, struct evsel *evsel, 1283d3b5e95SArnaldo Carvalho de Melo int cpu, int thread, u64 id); 12963503dbaSJiri Olsa int perf_evlist__id_add_fd(struct evlist *evlist, 13032dcd021SJiri Olsa struct evsel *evsel, 1311c59612dSJiri Olsa int cpu, int thread, int fd); 1323d3b5e95SArnaldo Carvalho de Melo 13363503dbaSJiri Olsa int perf_evlist__add_pollfd(struct evlist *evlist, int fd); 13463503dbaSJiri Olsa int perf_evlist__alloc_pollfd(struct evlist *evlist); 13563503dbaSJiri Olsa int perf_evlist__filter_pollfd(struct evlist *evlist, short revents_and_mask); 1361ddec7f0SArnaldo Carvalho de Melo 13763503dbaSJiri Olsa int perf_evlist__poll(struct evlist *evlist, int timeout); 138f66a889dSArnaldo Carvalho de Melo 13963503dbaSJiri Olsa struct evsel *perf_evlist__id2evsel(struct evlist *evlist, u64 id); 14063503dbaSJiri Olsa struct evsel *perf_evlist__id2evsel_strict(struct evlist *evlist, 141dddcf6abSAdrian Hunter u64 id); 14270db7533SArnaldo Carvalho de Melo 14363503dbaSJiri Olsa struct perf_sample_id *perf_evlist__id2sid(struct evlist *evlist, u64 id); 144932a3594SJiri Olsa 14563503dbaSJiri Olsa void perf_evlist__toggle_bkw_mmap(struct evlist *evlist, enum bkw_mmap_state state); 14654cc54deSWang Nan 14763503dbaSJiri Olsa void perf_evlist__mmap_consume(struct evlist *evlist, int idx); 1488e50d384SZhouyi Zhou 149474ddc4cSJiri Olsa int evlist__open(struct evlist *evlist); 15063503dbaSJiri Olsa void perf_evlist__close(struct evlist *evlist); 151727ab04eSArnaldo Carvalho de Melo 152e68ae9cfSArnaldo Carvalho de Melo struct callchain_param; 153e68ae9cfSArnaldo Carvalho de Melo 15463503dbaSJiri Olsa void perf_evlist__set_id_pos(struct evlist *evlist); 15575562573SAdrian Hunter bool perf_can_sample_identifier(void); 156b757bb09SAdrian Hunter bool perf_can_record_switch_events(void); 15783509565SAdrian Hunter bool perf_can_record_cpu_wide(void); 15863503dbaSJiri Olsa void perf_evlist__config(struct evlist *evlist, struct record_opts *opts, 159e68ae9cfSArnaldo Carvalho de Melo struct callchain_param *callchain); 160b4006796SArnaldo Carvalho de Melo int record_opts__config(struct record_opts *opts); 1610f82ebc4SArnaldo Carvalho de Melo 16263503dbaSJiri Olsa int perf_evlist__prepare_workload(struct evlist *evlist, 163602ad878SArnaldo Carvalho de Melo struct target *target, 16455e162eaSNamhyung Kim const char *argv[], bool pipe_output, 165735f7e0bSArnaldo Carvalho de Melo void (*exec_error)(int signo, siginfo_t *info, 166735f7e0bSArnaldo Carvalho de Melo void *ucontext)); 16763503dbaSJiri Olsa int perf_evlist__start_workload(struct evlist *evlist); 16835b9d88eSArnaldo Carvalho de Melo 169724ce97eSArnaldo Carvalho de Melo struct option; 170724ce97eSArnaldo Carvalho de Melo 171e9db1310SAdrian Hunter int __perf_evlist__parse_mmap_pages(unsigned int *mmap_pages, const char *str); 172994a1f78SJiri Olsa int perf_evlist__parse_mmap_pages(const struct option *opt, 173994a1f78SJiri Olsa const char *str, 174994a1f78SJiri Olsa int unset); 175994a1f78SJiri Olsa 176f5e7150cSArnaldo Carvalho de Melo unsigned long perf_event_mlock_kb_in_pages(void); 177f5e7150cSArnaldo Carvalho de Melo 17863503dbaSJiri Olsa int perf_evlist__mmap_ex(struct evlist *evlist, unsigned int pages, 1797a276ff6SWang Nan unsigned int auxtrace_pages, 180470530bbSAlexey Budankov bool auxtrace_overwrite, int nr_cblocks, 18151255a8aSAlexey Budankov int affinity, int flush, int comp_level); 18263503dbaSJiri Olsa int perf_evlist__mmap(struct evlist *evlist, unsigned int pages); 18363503dbaSJiri Olsa void perf_evlist__munmap(struct evlist *evlist); 1847e2ed097SArnaldo Carvalho de Melo 1850c582449SJiri Olsa size_t perf_evlist__mmap_size(unsigned long pages); 1860c582449SJiri Olsa 18763503dbaSJiri Olsa void perf_evlist__disable(struct evlist *evlist); 18863503dbaSJiri Olsa void perf_evlist__enable(struct evlist *evlist); 18963503dbaSJiri Olsa void perf_evlist__toggle_enable(struct evlist *evlist); 1904152ab37SArnaldo Carvalho de Melo 19163503dbaSJiri Olsa int perf_evlist__enable_event_idx(struct evlist *evlist, 19232dcd021SJiri Olsa struct evsel *evsel, int idx); 193395c3070SAdrian Hunter 19463503dbaSJiri Olsa void perf_evlist__set_selected(struct evlist *evlist, 19532dcd021SJiri Olsa struct evsel *evsel); 19681cce8deSArnaldo Carvalho de Melo 19763503dbaSJiri Olsa void perf_evlist__set_maps(struct evlist *evlist, struct perf_cpu_map *cpus, 1989749b90eSJiri Olsa struct perf_thread_map *threads); 19963503dbaSJiri Olsa int perf_evlist__create_maps(struct evlist *evlist, struct target *target); 20063503dbaSJiri Olsa int perf_evlist__apply_filters(struct evlist *evlist, struct evsel **err_evsel); 201f8a95309SArnaldo Carvalho de Melo 20263dab225SArnaldo Carvalho de Melo void __perf_evlist__set_leader(struct list_head *list); 20363503dbaSJiri Olsa void perf_evlist__set_leader(struct evlist *evlist); 20463dab225SArnaldo Carvalho de Melo 20563503dbaSJiri Olsa u64 perf_evlist__read_format(struct evlist *evlist); 20663503dbaSJiri Olsa u64 __perf_evlist__combined_sample_type(struct evlist *evlist); 20763503dbaSJiri Olsa u64 perf_evlist__combined_sample_type(struct evlist *evlist); 20863503dbaSJiri Olsa u64 perf_evlist__combined_branch_type(struct evlist *evlist); 20963503dbaSJiri Olsa bool perf_evlist__sample_id_all(struct evlist *evlist); 21063503dbaSJiri Olsa u16 perf_evlist__id_hdr_size(struct evlist *evlist); 21174429964SFrederic Weisbecker 21263503dbaSJiri Olsa int perf_evlist__parse_sample(struct evlist *evlist, union perf_event *event, 2130807d2d8SArnaldo Carvalho de Melo struct perf_sample *sample); 214cb0b29e0SArnaldo Carvalho de Melo 21563503dbaSJiri Olsa int perf_evlist__parse_sample_timestamp(struct evlist *evlist, 21601468120SJiri Olsa union perf_event *event, 21701468120SJiri Olsa u64 *timestamp); 21801468120SJiri Olsa 21963503dbaSJiri Olsa bool perf_evlist__valid_sample_type(struct evlist *evlist); 22063503dbaSJiri Olsa bool perf_evlist__valid_sample_id_all(struct evlist *evlist); 22163503dbaSJiri Olsa bool perf_evlist__valid_read_format(struct evlist *evlist); 2220529bc1fSJiri Olsa 22363503dbaSJiri Olsa void perf_evlist__splice_list_tail(struct evlist *evlist, 224f114d6efSAdrian Hunter struct list_head *list); 2250c21f736SArnaldo Carvalho de Melo 22663503dbaSJiri Olsa static inline bool perf_evlist__empty(struct evlist *evlist) 22764831a21SDavid Carrillo-Cisneros { 22864831a21SDavid Carrillo-Cisneros return list_empty(&evlist->entries); 22964831a21SDavid Carrillo-Cisneros } 23064831a21SDavid Carrillo-Cisneros 23163503dbaSJiri Olsa static inline struct evsel *perf_evlist__first(struct evlist *evlist) 2320c21f736SArnaldo Carvalho de Melo { 23332dcd021SJiri Olsa return list_entry(evlist->entries.next, struct evsel, node); 2340c21f736SArnaldo Carvalho de Melo } 2350c21f736SArnaldo Carvalho de Melo 23663503dbaSJiri Olsa static inline struct evsel *perf_evlist__last(struct evlist *evlist) 2370c21f736SArnaldo Carvalho de Melo { 23832dcd021SJiri Olsa return list_entry(evlist->entries.prev, struct evsel, node); 2390c21f736SArnaldo Carvalho de Melo } 24078f067b3SArnaldo Carvalho de Melo 24163503dbaSJiri Olsa size_t perf_evlist__fprintf(struct evlist *evlist, FILE *fp); 2420479b8b9SDavid Ahern 24363503dbaSJiri Olsa int perf_evlist__strerror_open(struct evlist *evlist, int err, char *buf, size_t size); 24463503dbaSJiri Olsa int perf_evlist__strerror_mmap(struct evlist *evlist, int err, char *buf, size_t size); 2456ef068cbSArnaldo Carvalho de Melo 24663503dbaSJiri Olsa bool perf_evlist__can_select_event(struct evlist *evlist, const char *str); 24763503dbaSJiri Olsa void perf_evlist__to_front(struct evlist *evlist, 24832dcd021SJiri Olsa struct evsel *move_evsel); 249a025e4f0SAdrian Hunter 2500050f7aaSArnaldo Carvalho de Melo /** 251e5cadb93SArnaldo Carvalho de Melo * __evlist__for_each_entry - iterate thru all the evsels 2520050f7aaSArnaldo Carvalho de Melo * @list: list_head instance to iterate 2530050f7aaSArnaldo Carvalho de Melo * @evsel: struct evsel iterator 2540050f7aaSArnaldo Carvalho de Melo */ 255e5cadb93SArnaldo Carvalho de Melo #define __evlist__for_each_entry(list, evsel) \ 2560050f7aaSArnaldo Carvalho de Melo list_for_each_entry(evsel, list, node) 2570050f7aaSArnaldo Carvalho de Melo 2580050f7aaSArnaldo Carvalho de Melo /** 259e5cadb93SArnaldo Carvalho de Melo * evlist__for_each_entry - iterate thru all the evsels 2600050f7aaSArnaldo Carvalho de Melo * @evlist: evlist instance to iterate 2610050f7aaSArnaldo Carvalho de Melo * @evsel: struct evsel iterator 2620050f7aaSArnaldo Carvalho de Melo */ 263e5cadb93SArnaldo Carvalho de Melo #define evlist__for_each_entry(evlist, evsel) \ 264e5cadb93SArnaldo Carvalho de Melo __evlist__for_each_entry(&(evlist)->entries, evsel) 2650050f7aaSArnaldo Carvalho de Melo 2660050f7aaSArnaldo Carvalho de Melo /** 267e5cadb93SArnaldo Carvalho de Melo * __evlist__for_each_entry_continue - continue iteration thru all the evsels 2680050f7aaSArnaldo Carvalho de Melo * @list: list_head instance to iterate 2690050f7aaSArnaldo Carvalho de Melo * @evsel: struct evsel iterator 2700050f7aaSArnaldo Carvalho de Melo */ 271e5cadb93SArnaldo Carvalho de Melo #define __evlist__for_each_entry_continue(list, evsel) \ 2720050f7aaSArnaldo Carvalho de Melo list_for_each_entry_continue(evsel, list, node) 2730050f7aaSArnaldo Carvalho de Melo 2740050f7aaSArnaldo Carvalho de Melo /** 275e5cadb93SArnaldo Carvalho de Melo * evlist__for_each_entry_continue - continue iteration thru all the evsels 2760050f7aaSArnaldo Carvalho de Melo * @evlist: evlist instance to iterate 2770050f7aaSArnaldo Carvalho de Melo * @evsel: struct evsel iterator 2780050f7aaSArnaldo Carvalho de Melo */ 279e5cadb93SArnaldo Carvalho de Melo #define evlist__for_each_entry_continue(evlist, evsel) \ 280e5cadb93SArnaldo Carvalho de Melo __evlist__for_each_entry_continue(&(evlist)->entries, evsel) 2810050f7aaSArnaldo Carvalho de Melo 2820050f7aaSArnaldo Carvalho de Melo /** 283e5cadb93SArnaldo Carvalho de Melo * __evlist__for_each_entry_reverse - iterate thru all the evsels in reverse order 2840050f7aaSArnaldo Carvalho de Melo * @list: list_head instance to iterate 2850050f7aaSArnaldo Carvalho de Melo * @evsel: struct evsel iterator 2860050f7aaSArnaldo Carvalho de Melo */ 287e5cadb93SArnaldo Carvalho de Melo #define __evlist__for_each_entry_reverse(list, evsel) \ 2880050f7aaSArnaldo Carvalho de Melo list_for_each_entry_reverse(evsel, list, node) 2890050f7aaSArnaldo Carvalho de Melo 2900050f7aaSArnaldo Carvalho de Melo /** 291e5cadb93SArnaldo Carvalho de Melo * evlist__for_each_entry_reverse - iterate thru all the evsels in reverse order 2920050f7aaSArnaldo Carvalho de Melo * @evlist: evlist instance to iterate 2930050f7aaSArnaldo Carvalho de Melo * @evsel: struct evsel iterator 2940050f7aaSArnaldo Carvalho de Melo */ 295e5cadb93SArnaldo Carvalho de Melo #define evlist__for_each_entry_reverse(evlist, evsel) \ 296e5cadb93SArnaldo Carvalho de Melo __evlist__for_each_entry_reverse(&(evlist)->entries, evsel) 2970050f7aaSArnaldo Carvalho de Melo 2980050f7aaSArnaldo Carvalho de Melo /** 299e5cadb93SArnaldo Carvalho de Melo * __evlist__for_each_entry_safe - safely iterate thru all the evsels 3000050f7aaSArnaldo Carvalho de Melo * @list: list_head instance to iterate 3010050f7aaSArnaldo Carvalho de Melo * @tmp: struct evsel temp iterator 3020050f7aaSArnaldo Carvalho de Melo * @evsel: struct evsel iterator 3030050f7aaSArnaldo Carvalho de Melo */ 304e5cadb93SArnaldo Carvalho de Melo #define __evlist__for_each_entry_safe(list, tmp, evsel) \ 3050050f7aaSArnaldo Carvalho de Melo list_for_each_entry_safe(evsel, tmp, list, node) 3060050f7aaSArnaldo Carvalho de Melo 3070050f7aaSArnaldo Carvalho de Melo /** 308e5cadb93SArnaldo Carvalho de Melo * evlist__for_each_entry_safe - safely iterate thru all the evsels 3090050f7aaSArnaldo Carvalho de Melo * @evlist: evlist instance to iterate 3100050f7aaSArnaldo Carvalho de Melo * @evsel: struct evsel iterator 3110050f7aaSArnaldo Carvalho de Melo * @tmp: struct evsel temp iterator 3120050f7aaSArnaldo Carvalho de Melo */ 313e5cadb93SArnaldo Carvalho de Melo #define evlist__for_each_entry_safe(evlist, tmp, evsel) \ 314e5cadb93SArnaldo Carvalho de Melo __evlist__for_each_entry_safe(&(evlist)->entries, tmp, evsel) 315c09ec622SAdrian Hunter 31663503dbaSJiri Olsa void perf_evlist__set_tracking_event(struct evlist *evlist, 31732dcd021SJiri Olsa struct evsel *tracking_evsel); 31845cf6c33SJiri Olsa 31932dcd021SJiri Olsa struct evsel * 32063503dbaSJiri Olsa perf_evlist__find_evsel_by_str(struct evlist *evlist, const char *str); 3217cb5c5acSJiri Olsa 32263503dbaSJiri Olsa struct evsel *perf_evlist__event2evsel(struct evlist *evlist, 3237cb5c5acSJiri Olsa union perf_event *event); 32407d6f446SArnaldo Carvalho de Melo 32563503dbaSJiri Olsa bool perf_evlist__exclude_kernel(struct evlist *evlist); 326e2bdbe80SJin Yao 32763503dbaSJiri Olsa void perf_evlist__force_leader(struct evlist *evlist); 328e2bdbe80SJin Yao 32963503dbaSJiri Olsa struct evsel *perf_evlist__reset_weak_group(struct evlist *evlist, 33032dcd021SJiri Olsa struct evsel *evsel); 331361c99a6SArnaldo Carvalho de Melo #endif /* __PERF_EVLIST_H */ 332