at v5.5-rc1 126 lines 3.9 kB view raw
1/* SPDX-License-Identifier: GPL-2.0 */ 2#ifndef __LIBPERF_INTERNAL_EVLIST_H 3#define __LIBPERF_INTERNAL_EVLIST_H 4 5#include <linux/list.h> 6#include <api/fd/array.h> 7#include <internal/evsel.h> 8 9#define PERF_EVLIST__HLIST_BITS 8 10#define PERF_EVLIST__HLIST_SIZE (1 << PERF_EVLIST__HLIST_BITS) 11 12struct perf_cpu_map; 13struct perf_thread_map; 14struct perf_mmap_param; 15 16struct perf_evlist { 17 struct list_head entries; 18 int nr_entries; 19 bool has_user_cpus; 20 struct perf_cpu_map *cpus; 21 struct perf_thread_map *threads; 22 int nr_mmaps; 23 size_t mmap_len; 24 struct fdarray pollfd; 25 struct hlist_head heads[PERF_EVLIST__HLIST_SIZE]; 26 struct perf_mmap *mmap; 27 struct perf_mmap *mmap_ovw; 28 struct perf_mmap *mmap_first; 29 struct perf_mmap *mmap_ovw_first; 30}; 31 32typedef void 33(*perf_evlist_mmap__cb_idx_t)(struct perf_evlist*, struct perf_mmap_param*, int, bool); 34typedef struct perf_mmap* 35(*perf_evlist_mmap__cb_get_t)(struct perf_evlist*, bool, int); 36typedef int 37(*perf_evlist_mmap__cb_mmap_t)(struct perf_mmap*, struct perf_mmap_param*, int, int); 38 39struct perf_evlist_mmap_ops { 40 perf_evlist_mmap__cb_idx_t idx; 41 perf_evlist_mmap__cb_get_t get; 42 perf_evlist_mmap__cb_mmap_t mmap; 43}; 44 45int perf_evlist__alloc_pollfd(struct perf_evlist *evlist); 46int perf_evlist__add_pollfd(struct perf_evlist *evlist, int fd, 47 void *ptr, short revent); 48 49int perf_evlist__mmap_ops(struct perf_evlist *evlist, 50 struct perf_evlist_mmap_ops *ops, 51 struct perf_mmap_param *mp); 52 53void perf_evlist__init(struct perf_evlist *evlist); 54void perf_evlist__exit(struct perf_evlist *evlist); 55 56/** 57 * __perf_evlist__for_each_entry - iterate thru all the evsels 58 * @list: list_head instance to iterate 59 * @evsel: struct perf_evsel iterator 60 */ 61#define __perf_evlist__for_each_entry(list, evsel) \ 62 list_for_each_entry(evsel, list, node) 63 64/** 65 * evlist__for_each_entry - iterate thru all the evsels 66 * @evlist: perf_evlist instance to iterate 67 * @evsel: struct perf_evsel iterator 68 */ 69#define perf_evlist__for_each_entry(evlist, evsel) \ 70 __perf_evlist__for_each_entry(&(evlist)->entries, evsel) 71 72/** 73 * __perf_evlist__for_each_entry_reverse - iterate thru all the evsels in reverse order 74 * @list: list_head instance to iterate 75 * @evsel: struct evsel iterator 76 */ 77#define __perf_evlist__for_each_entry_reverse(list, evsel) \ 78 list_for_each_entry_reverse(evsel, list, node) 79 80/** 81 * perf_evlist__for_each_entry_reverse - iterate thru all the evsels in reverse order 82 * @evlist: evlist instance to iterate 83 * @evsel: struct evsel iterator 84 */ 85#define perf_evlist__for_each_entry_reverse(evlist, evsel) \ 86 __perf_evlist__for_each_entry_reverse(&(evlist)->entries, evsel) 87 88/** 89 * __perf_evlist__for_each_entry_safe - safely iterate thru all the evsels 90 * @list: list_head instance to iterate 91 * @tmp: struct evsel temp iterator 92 * @evsel: struct evsel iterator 93 */ 94#define __perf_evlist__for_each_entry_safe(list, tmp, evsel) \ 95 list_for_each_entry_safe(evsel, tmp, list, node) 96 97/** 98 * perf_evlist__for_each_entry_safe - safely iterate thru all the evsels 99 * @evlist: evlist instance to iterate 100 * @evsel: struct evsel iterator 101 * @tmp: struct evsel temp iterator 102 */ 103#define perf_evlist__for_each_entry_safe(evlist, tmp, evsel) \ 104 __perf_evlist__for_each_entry_safe(&(evlist)->entries, tmp, evsel) 105 106static inline struct perf_evsel *perf_evlist__first(struct perf_evlist *evlist) 107{ 108 return list_entry(evlist->entries.next, struct perf_evsel, node); 109} 110 111static inline struct perf_evsel *perf_evlist__last(struct perf_evlist *evlist) 112{ 113 return list_entry(evlist->entries.prev, struct perf_evsel, node); 114} 115 116u64 perf_evlist__read_format(struct perf_evlist *evlist); 117 118void perf_evlist__id_add(struct perf_evlist *evlist, 119 struct perf_evsel *evsel, 120 int cpu, int thread, u64 id); 121 122int perf_evlist__id_add_fd(struct perf_evlist *evlist, 123 struct perf_evsel *evsel, 124 int cpu, int thread, int fd); 125 126#endif /* __LIBPERF_INTERNAL_EVLIST_H */