Lines Matching refs:evsel

23 void perf_evsel__init(struct perf_evsel *evsel, struct perf_event_attr *attr,  in perf_evsel__init()  argument
26 INIT_LIST_HEAD(&evsel->node); in perf_evsel__init()
27 INIT_LIST_HEAD(&evsel->per_stream_periods); in perf_evsel__init()
28 evsel->attr = *attr; in perf_evsel__init()
29 evsel->idx = idx; in perf_evsel__init()
30 evsel->leader = evsel; in perf_evsel__init()
35 struct perf_evsel *evsel = zalloc(sizeof(*evsel)); in perf_evsel__new() local
37 if (evsel != NULL) in perf_evsel__new()
38 perf_evsel__init(evsel, attr, 0); in perf_evsel__new()
40 return evsel; in perf_evsel__new()
43 void perf_evsel__delete(struct perf_evsel *evsel) in perf_evsel__delete() argument
45 free(evsel); in perf_evsel__delete()
54 int perf_evsel__alloc_fd(struct perf_evsel *evsel, int ncpus, int nthreads) in perf_evsel__alloc_fd() argument
56 evsel->fd = xyarray__new(ncpus, nthreads, sizeof(int)); in perf_evsel__alloc_fd()
58 if (evsel->fd) { in perf_evsel__alloc_fd()
63 int *fd = FD(evsel, idx, thread); in perf_evsel__alloc_fd()
71 return evsel->fd != NULL ? 0 : -ENOMEM; in perf_evsel__alloc_fd()
74 static int perf_evsel__alloc_mmap(struct perf_evsel *evsel, int ncpus, int nthreads) in perf_evsel__alloc_mmap() argument
76 evsel->mmap = xyarray__new(ncpus, nthreads, sizeof(struct perf_mmap)); in perf_evsel__alloc_mmap()
78 return evsel->mmap != NULL ? 0 : -ENOMEM; in perf_evsel__alloc_mmap()
89 static int get_group_fd(struct perf_evsel *evsel, int cpu_map_idx, int thread, int *group_fd) in get_group_fd() argument
91 struct perf_evsel *leader = evsel->leader; in get_group_fd()
94 if (evsel == leader) { in get_group_fd()
115 int perf_evsel__open(struct perf_evsel *evsel, struct perf_cpu_map *cpus, in perf_evsel__open() argument
145 if (evsel->fd == NULL && in perf_evsel__open()
146 perf_evsel__alloc_fd(evsel, perf_cpu_map__nr(cpus), threads->nr) < 0) in perf_evsel__open()
153 evsel_fd = FD(evsel, idx, thread); in perf_evsel__open()
159 err = get_group_fd(evsel, idx, thread, &group_fd); in perf_evsel__open()
163 fd = sys_perf_event_open(&evsel->attr, in perf_evsel__open()
177 perf_evsel__close(evsel); in perf_evsel__open()
182 static void perf_evsel__close_fd_cpu(struct perf_evsel *evsel, int cpu_map_idx) in perf_evsel__close_fd_cpu() argument
186 for (thread = 0; thread < xyarray__max_y(evsel->fd); ++thread) { in perf_evsel__close_fd_cpu()
187 int *fd = FD(evsel, cpu_map_idx, thread); in perf_evsel__close_fd_cpu()
196 void perf_evsel__close_fd(struct perf_evsel *evsel) in perf_evsel__close_fd() argument
198 for (int idx = 0; idx < xyarray__max_x(evsel->fd); idx++) in perf_evsel__close_fd()
199 perf_evsel__close_fd_cpu(evsel, idx); in perf_evsel__close_fd()
202 void perf_evsel__free_fd(struct perf_evsel *evsel) in perf_evsel__free_fd() argument
204 xyarray__delete(evsel->fd); in perf_evsel__free_fd()
205 evsel->fd = NULL; in perf_evsel__free_fd()
208 void perf_evsel__close(struct perf_evsel *evsel) in perf_evsel__close() argument
210 if (evsel->fd == NULL) in perf_evsel__close()
213 perf_evsel__close_fd(evsel); in perf_evsel__close()
214 perf_evsel__free_fd(evsel); in perf_evsel__close()
217 void perf_evsel__close_cpu(struct perf_evsel *evsel, int cpu_map_idx) in perf_evsel__close_cpu() argument
219 if (evsel->fd == NULL) in perf_evsel__close_cpu()
222 perf_evsel__close_fd_cpu(evsel, cpu_map_idx); in perf_evsel__close_cpu()
225 void perf_evsel__munmap(struct perf_evsel *evsel) in perf_evsel__munmap() argument
229 if (evsel->fd == NULL || evsel->mmap == NULL) in perf_evsel__munmap()
232 for (idx = 0; idx < xyarray__max_x(evsel->fd); idx++) { in perf_evsel__munmap()
233 for (thread = 0; thread < xyarray__max_y(evsel->fd); thread++) { in perf_evsel__munmap()
234 int *fd = FD(evsel, idx, thread); in perf_evsel__munmap()
239 perf_mmap__munmap(MMAP(evsel, idx, thread)); in perf_evsel__munmap()
243 xyarray__delete(evsel->mmap); in perf_evsel__munmap()
244 evsel->mmap = NULL; in perf_evsel__munmap()
247 int perf_evsel__mmap(struct perf_evsel *evsel, int pages) in perf_evsel__mmap() argument
255 if (evsel->fd == NULL || evsel->mmap) in perf_evsel__mmap()
258 if (perf_evsel__alloc_mmap(evsel, xyarray__max_x(evsel->fd), xyarray__max_y(evsel->fd)) < 0) in perf_evsel__mmap()
261 for (idx = 0; idx < xyarray__max_x(evsel->fd); idx++) { in perf_evsel__mmap()
262 for (thread = 0; thread < xyarray__max_y(evsel->fd); thread++) { in perf_evsel__mmap()
263 int *fd = FD(evsel, idx, thread); in perf_evsel__mmap()
265 struct perf_cpu cpu = perf_cpu_map__cpu(evsel->cpus, idx); in perf_evsel__mmap()
270 map = MMAP(evsel, idx, thread); in perf_evsel__mmap()
275 perf_evsel__munmap(evsel); in perf_evsel__mmap()
284 void *perf_evsel__mmap_base(struct perf_evsel *evsel, int cpu_map_idx, int thread) in perf_evsel__mmap_base() argument
286 int *fd = FD(evsel, cpu_map_idx, thread); in perf_evsel__mmap_base()
288 if (fd == NULL || *fd < 0 || MMAP(evsel, cpu_map_idx, thread) == NULL) in perf_evsel__mmap_base()
291 return MMAP(evsel, cpu_map_idx, thread)->base; in perf_evsel__mmap_base()
294 int perf_evsel__read_size(struct perf_evsel *evsel) in perf_evsel__read_size() argument
296 u64 read_format = evsel->attr.read_format; in perf_evsel__read_size()
314 nr = evsel->nr_members; in perf_evsel__read_size()
323 static int perf_evsel__read_group(struct perf_evsel *evsel, int cpu_map_idx, in perf_evsel__read_group() argument
326 size_t size = perf_evsel__read_size(evsel); in perf_evsel__read_group()
327 int *fd = FD(evsel, cpu_map_idx, thread); in perf_evsel__read_group()
328 u64 read_format = evsel->attr.read_format; in perf_evsel__read_group()
368 static void perf_evsel__adjust_values(struct perf_evsel *evsel, u64 *buf, in perf_evsel__adjust_values() argument
371 u64 read_format = evsel->attr.read_format; in perf_evsel__adjust_values()
389 int perf_evsel__read(struct perf_evsel *evsel, int cpu_map_idx, int thread, in perf_evsel__read() argument
392 size_t size = perf_evsel__read_size(evsel); in perf_evsel__read()
393 int *fd = FD(evsel, cpu_map_idx, thread); in perf_evsel__read()
394 u64 read_format = evsel->attr.read_format; in perf_evsel__read()
403 return perf_evsel__read_group(evsel, cpu_map_idx, thread, count); in perf_evsel__read()
405 if (MMAP(evsel, cpu_map_idx, thread) && in perf_evsel__read()
407 !perf_mmap__read_self(MMAP(evsel, cpu_map_idx, thread), count)) in perf_evsel__read()
413 perf_evsel__adjust_values(evsel, buf.values, count); in perf_evsel__read()
417 static int perf_evsel__ioctl(struct perf_evsel *evsel, int ioc, void *arg, in perf_evsel__ioctl() argument
420 int *fd = FD(evsel, cpu_map_idx, thread); in perf_evsel__ioctl()
428 static int perf_evsel__run_ioctl(struct perf_evsel *evsel, in perf_evsel__run_ioctl() argument
434 for (thread = 0; thread < xyarray__max_y(evsel->fd); thread++) { in perf_evsel__run_ioctl()
435 int err = perf_evsel__ioctl(evsel, ioc, arg, cpu_map_idx, thread); in perf_evsel__run_ioctl()
444 int perf_evsel__enable_cpu(struct perf_evsel *evsel, int cpu_map_idx) in perf_evsel__enable_cpu() argument
446 return perf_evsel__run_ioctl(evsel, PERF_EVENT_IOC_ENABLE, NULL, cpu_map_idx); in perf_evsel__enable_cpu()
449 int perf_evsel__enable_thread(struct perf_evsel *evsel, int thread) in perf_evsel__enable_thread() argument
455 perf_cpu_map__for_each_cpu(cpu, idx, evsel->cpus) { in perf_evsel__enable_thread()
456 err = perf_evsel__ioctl(evsel, PERF_EVENT_IOC_ENABLE, NULL, idx, thread); in perf_evsel__enable_thread()
464 int perf_evsel__enable(struct perf_evsel *evsel) in perf_evsel__enable() argument
469 for (i = 0; i < xyarray__max_x(evsel->fd) && !err; i++) in perf_evsel__enable()
470 err = perf_evsel__run_ioctl(evsel, PERF_EVENT_IOC_ENABLE, NULL, i); in perf_evsel__enable()
474 int perf_evsel__disable_cpu(struct perf_evsel *evsel, int cpu_map_idx) in perf_evsel__disable_cpu() argument
476 return perf_evsel__run_ioctl(evsel, PERF_EVENT_IOC_DISABLE, NULL, cpu_map_idx); in perf_evsel__disable_cpu()
479 int perf_evsel__disable(struct perf_evsel *evsel) in perf_evsel__disable() argument
484 for (i = 0; i < xyarray__max_x(evsel->fd) && !err; i++) in perf_evsel__disable()
485 err = perf_evsel__run_ioctl(evsel, PERF_EVENT_IOC_DISABLE, NULL, i); in perf_evsel__disable()
489 int perf_evsel__apply_filter(struct perf_evsel *evsel, const char *filter) in perf_evsel__apply_filter() argument
493 for (i = 0; i < perf_cpu_map__nr(evsel->cpus) && !err; i++) in perf_evsel__apply_filter()
494 err = perf_evsel__run_ioctl(evsel, in perf_evsel__apply_filter()
500 struct perf_cpu_map *perf_evsel__cpus(struct perf_evsel *evsel) in perf_evsel__cpus() argument
502 return evsel->cpus; in perf_evsel__cpus()
505 struct perf_thread_map *perf_evsel__threads(struct perf_evsel *evsel) in perf_evsel__threads() argument
507 return evsel->threads; in perf_evsel__threads()
510 struct perf_event_attr *perf_evsel__attr(struct perf_evsel *evsel) in perf_evsel__attr() argument
512 return &evsel->attr; in perf_evsel__attr()
515 int perf_evsel__alloc_id(struct perf_evsel *evsel, int ncpus, int nthreads) in perf_evsel__alloc_id() argument
520 evsel->sample_id = xyarray__new(ncpus, nthreads, sizeof(struct perf_sample_id)); in perf_evsel__alloc_id()
521 if (evsel->sample_id == NULL) in perf_evsel__alloc_id()
524 evsel->id = zalloc(ncpus * nthreads * sizeof(u64)); in perf_evsel__alloc_id()
525 if (evsel->id == NULL) { in perf_evsel__alloc_id()
526 xyarray__delete(evsel->sample_id); in perf_evsel__alloc_id()
527 evsel->sample_id = NULL; in perf_evsel__alloc_id()
534 void perf_evsel__free_id(struct perf_evsel *evsel) in perf_evsel__free_id() argument
538 xyarray__delete(evsel->sample_id); in perf_evsel__free_id()
539 evsel->sample_id = NULL; in perf_evsel__free_id()
540 zfree(&evsel->id); in perf_evsel__free_id()
541 evsel->ids = 0; in perf_evsel__free_id()
543 perf_evsel_for_each_per_thread_period_safe(evsel, n, pos) { in perf_evsel__free_id()
549 bool perf_evsel__attr_has_per_thread_sample_period(struct perf_evsel *evsel) in perf_evsel__attr_has_per_thread_sample_period() argument
551 return (evsel->attr.sample_type & PERF_SAMPLE_READ) && in perf_evsel__attr_has_per_thread_sample_period()
552 (evsel->attr.sample_type & PERF_SAMPLE_TID) && in perf_evsel__attr_has_per_thread_sample_period()
553 evsel->attr.inherit; in perf_evsel__attr_has_per_thread_sample_period()
572 if (sid->evsel == NULL) in perf_sample_id__get_period_storage()
582 list_add_tail(&res->node, &sid->evsel->per_stream_periods); in perf_sample_id__get_period_storage()