Path: blob/master/tools/lib/perf/include/internal/evlist.h
26302 views
/* SPDX-License-Identifier: GPL-2.0 */1#ifndef __LIBPERF_INTERNAL_EVLIST_H2#define __LIBPERF_INTERNAL_EVLIST_H34#include <linux/list.h>5#include <api/fd/array.h>6#include <internal/cpumap.h>7#include <internal/evsel.h>89#define PERF_EVLIST__HLIST_BITS 810#define PERF_EVLIST__HLIST_SIZE (1 << PERF_EVLIST__HLIST_BITS)1112struct perf_cpu_map;13struct perf_thread_map;14struct perf_mmap_param;1516struct perf_evlist {17struct list_head entries;18int nr_entries;19bool has_user_cpus;20bool needs_map_propagation;21/**22* The cpus passed from the command line or all online CPUs by23* default.24*/25struct perf_cpu_map *user_requested_cpus;26/** The union of all evsel cpu maps. */27struct perf_cpu_map *all_cpus;28struct perf_thread_map *threads;29int nr_mmaps;30size_t mmap_len;31struct fdarray pollfd;32struct hlist_head heads[PERF_EVLIST__HLIST_SIZE];33struct perf_mmap *mmap;34struct perf_mmap *mmap_ovw;35struct perf_mmap *mmap_first;36struct perf_mmap *mmap_ovw_first;37};3839typedef void40(*perf_evlist_mmap__cb_idx_t)(struct perf_evlist*, struct perf_evsel*,41struct perf_mmap_param*, int);42typedef struct perf_mmap*43(*perf_evlist_mmap__cb_get_t)(struct perf_evlist*, bool, int);44typedef int45(*perf_evlist_mmap__cb_mmap_t)(struct perf_mmap*, struct perf_mmap_param*, int, struct perf_cpu);4647struct perf_evlist_mmap_ops {48perf_evlist_mmap__cb_idx_t idx;49perf_evlist_mmap__cb_get_t get;50perf_evlist_mmap__cb_mmap_t mmap;51};5253int perf_evlist__alloc_pollfd(struct perf_evlist *evlist);54int perf_evlist__add_pollfd(struct perf_evlist *evlist, int fd,55void *ptr, short revent, enum fdarray_flags flags);5657int perf_evlist__mmap_ops(struct perf_evlist *evlist,58struct perf_evlist_mmap_ops *ops,59struct perf_mmap_param *mp);6061void perf_evlist__init(struct perf_evlist *evlist);62void perf_evlist__exit(struct perf_evlist *evlist);6364/**65* __perf_evlist__for_each_entry - iterate thru all the evsels66* @list: list_head instance to iterate67* @evsel: struct perf_evsel iterator68*/69#define __perf_evlist__for_each_entry(list, evsel) \70list_for_each_entry(evsel, list, node)7172/**73* evlist__for_each_entry - iterate thru all the evsels74* @evlist: perf_evlist instance to iterate75* @evsel: struct perf_evsel iterator76*/77#define perf_evlist__for_each_entry(evlist, evsel) \78__perf_evlist__for_each_entry(&(evlist)->entries, evsel)7980/**81* __perf_evlist__for_each_entry_reverse - iterate thru all the evsels in reverse order82* @list: list_head instance to iterate83* @evsel: struct evsel iterator84*/85#define __perf_evlist__for_each_entry_reverse(list, evsel) \86list_for_each_entry_reverse(evsel, list, node)8788/**89* perf_evlist__for_each_entry_reverse - iterate thru all the evsels in reverse order90* @evlist: evlist instance to iterate91* @evsel: struct evsel iterator92*/93#define perf_evlist__for_each_entry_reverse(evlist, evsel) \94__perf_evlist__for_each_entry_reverse(&(evlist)->entries, evsel)9596/**97* __perf_evlist__for_each_entry_safe - safely iterate thru all the evsels98* @list: list_head instance to iterate99* @tmp: struct evsel temp iterator100* @evsel: struct evsel iterator101*/102#define __perf_evlist__for_each_entry_safe(list, tmp, evsel) \103list_for_each_entry_safe(evsel, tmp, list, node)104105/**106* perf_evlist__for_each_entry_safe - safely iterate thru all the evsels107* @evlist: evlist instance to iterate108* @evsel: struct evsel iterator109* @tmp: struct evsel temp iterator110*/111#define perf_evlist__for_each_entry_safe(evlist, tmp, evsel) \112__perf_evlist__for_each_entry_safe(&(evlist)->entries, tmp, evsel)113114static inline struct perf_evsel *perf_evlist__first(struct perf_evlist *evlist)115{116return list_entry(evlist->entries.next, struct perf_evsel, node);117}118119static inline struct perf_evsel *perf_evlist__last(struct perf_evlist *evlist)120{121return list_entry(evlist->entries.prev, struct perf_evsel, node);122}123124u64 perf_evlist__read_format(struct perf_evlist *evlist);125126void perf_evlist__id_add(struct perf_evlist *evlist,127struct perf_evsel *evsel,128int cpu_map_idx, int thread, u64 id);129130int perf_evlist__id_add_fd(struct perf_evlist *evlist,131struct perf_evsel *evsel,132int cpu_map_idx, int thread, int fd);133134void perf_evlist__reset_id_hash(struct perf_evlist *evlist);135136void __perf_evlist__set_leader(struct list_head *list, struct perf_evsel *leader);137138void perf_evlist__go_system_wide(struct perf_evlist *evlist, struct perf_evsel *evsel);139#endif /* __LIBPERF_INTERNAL_EVLIST_H */140141142