Lines Matching +full:cpu +full:- +full:nr
1 // SPDX-License-Identifier: GPL-2.0
25 INIT_LIST_HEAD(&evsel->node); in perf_evsel__init()
26 evsel->attr = *attr; in perf_evsel__init()
27 evsel->idx = idx; in perf_evsel__init()
28 evsel->leader = evsel; in perf_evsel__init()
46 #define FD(e, x, y) ((int *) xyarray__entry(e->fd, x, y))
47 #define MMAP(e, x, y) (e->mmap ? ((struct perf_mmap *) xyarray__entry(e->mmap, x, y)) : NULL)
51 evsel->fd = xyarray__new(ncpus, nthreads, sizeof(int)); in perf_evsel__alloc_fd()
53 if (evsel->fd) { in perf_evsel__alloc_fd()
54 int cpu, thread; in perf_evsel__alloc_fd() local
55 for (cpu = 0; cpu < ncpus; cpu++) { in perf_evsel__alloc_fd()
57 int *fd = FD(evsel, cpu, thread); in perf_evsel__alloc_fd()
60 *fd = -1; in perf_evsel__alloc_fd()
65 return evsel->fd != NULL ? 0 : -ENOMEM; in perf_evsel__alloc_fd()
70 evsel->mmap = xyarray__new(ncpus, nthreads, sizeof(struct perf_mmap)); in perf_evsel__alloc_mmap()
72 return evsel->mmap != NULL ? 0 : -ENOMEM; in perf_evsel__alloc_mmap()
77 pid_t pid, int cpu, int group_fd, in sys_perf_event_open() argument
80 return syscall(__NR_perf_event_open, attr, pid, cpu, group_fd, flags); in sys_perf_event_open()
83 static int get_group_fd(struct perf_evsel *evsel, int cpu, int thread, int *group_fd) in get_group_fd() argument
85 struct perf_evsel *leader = evsel->leader; in get_group_fd()
89 *group_fd = -1; in get_group_fd()
97 if (!leader->fd) in get_group_fd()
98 return -ENOTCONN; in get_group_fd()
100 fd = FD(leader, cpu, thread); in get_group_fd()
101 if (fd == NULL || *fd == -1) in get_group_fd()
102 return -EBADF; in get_group_fd()
112 int cpu, thread, err = 0; in perf_evsel__open() local
120 return -ENOMEM; in perf_evsel__open()
132 return -ENOMEM; in perf_evsel__open()
138 if (evsel->fd == NULL && in perf_evsel__open()
139 perf_evsel__alloc_fd(evsel, cpus->nr, threads->nr) < 0) in perf_evsel__open()
140 return -ENOMEM; in perf_evsel__open()
142 for (cpu = 0; cpu < cpus->nr; cpu++) { in perf_evsel__open()
143 for (thread = 0; thread < threads->nr; thread++) { in perf_evsel__open()
146 evsel_fd = FD(evsel, cpu, thread); in perf_evsel__open()
148 return -EINVAL; in perf_evsel__open()
150 err = get_group_fd(evsel, cpu, thread, &group_fd); in perf_evsel__open()
154 fd = sys_perf_event_open(&evsel->attr, in perf_evsel__open()
155 threads->map[thread].pid, in perf_evsel__open()
156 cpus->map[cpu], group_fd, 0); in perf_evsel__open()
159 return -errno; in perf_evsel__open()
168 static void perf_evsel__close_fd_cpu(struct perf_evsel *evsel, int cpu) in perf_evsel__close_fd_cpu() argument
172 for (thread = 0; thread < xyarray__max_y(evsel->fd); ++thread) { in perf_evsel__close_fd_cpu()
173 int *fd = FD(evsel, cpu, thread); in perf_evsel__close_fd_cpu()
177 *fd = -1; in perf_evsel__close_fd_cpu()
184 int cpu; in perf_evsel__close_fd() local
186 for (cpu = 0; cpu < xyarray__max_x(evsel->fd); cpu++) in perf_evsel__close_fd()
187 perf_evsel__close_fd_cpu(evsel, cpu); in perf_evsel__close_fd()
192 xyarray__delete(evsel->fd); in perf_evsel__free_fd()
193 evsel->fd = NULL; in perf_evsel__free_fd()
198 if (evsel->fd == NULL) in perf_evsel__close()
205 void perf_evsel__close_cpu(struct perf_evsel *evsel, int cpu) in perf_evsel__close_cpu() argument
207 if (evsel->fd == NULL) in perf_evsel__close_cpu()
210 perf_evsel__close_fd_cpu(evsel, cpu); in perf_evsel__close_cpu()
215 int cpu, thread; in perf_evsel__munmap() local
217 if (evsel->fd == NULL || evsel->mmap == NULL) in perf_evsel__munmap()
220 for (cpu = 0; cpu < xyarray__max_x(evsel->fd); cpu++) { in perf_evsel__munmap()
221 for (thread = 0; thread < xyarray__max_y(evsel->fd); thread++) { in perf_evsel__munmap()
222 int *fd = FD(evsel, cpu, thread); in perf_evsel__munmap()
227 perf_mmap__munmap(MMAP(evsel, cpu, thread)); in perf_evsel__munmap()
231 xyarray__delete(evsel->mmap); in perf_evsel__munmap()
232 evsel->mmap = NULL; in perf_evsel__munmap()
237 int ret, cpu, thread; in perf_evsel__mmap() local
240 .mask = (pages * page_size) - 1, in perf_evsel__mmap()
243 if (evsel->fd == NULL || evsel->mmap) in perf_evsel__mmap()
244 return -EINVAL; in perf_evsel__mmap()
246 if (perf_evsel__alloc_mmap(evsel, xyarray__max_x(evsel->fd), xyarray__max_y(evsel->fd)) < 0) in perf_evsel__mmap()
247 return -ENOMEM; in perf_evsel__mmap()
249 for (cpu = 0; cpu < xyarray__max_x(evsel->fd); cpu++) { in perf_evsel__mmap()
250 for (thread = 0; thread < xyarray__max_y(evsel->fd); thread++) { in perf_evsel__mmap()
251 int *fd = FD(evsel, cpu, thread); in perf_evsel__mmap()
257 map = MMAP(evsel, cpu, thread); in perf_evsel__mmap()
260 ret = perf_mmap__mmap(map, &mp, *fd, cpu); in perf_evsel__mmap()
271 void *perf_evsel__mmap_base(struct perf_evsel *evsel, int cpu, int thread) in perf_evsel__mmap_base() argument
273 int *fd = FD(evsel, cpu, thread); in perf_evsel__mmap_base()
275 if (fd == NULL || *fd < 0 || MMAP(evsel, cpu, thread) == NULL) in perf_evsel__mmap_base()
278 return MMAP(evsel, cpu, thread)->base; in perf_evsel__mmap_base()
283 u64 read_format = evsel->attr.read_format; in perf_evsel__read_size()
286 int nr = 1; in perf_evsel__read_size() local
298 nr = evsel->nr_members; in perf_evsel__read_size()
302 size += entry * nr; in perf_evsel__read_size()
306 int perf_evsel__read(struct perf_evsel *evsel, int cpu, int thread, in perf_evsel__read() argument
310 int *fd = FD(evsel, cpu, thread); in perf_evsel__read()
315 return -EINVAL; in perf_evsel__read()
317 if (MMAP(evsel, cpu, thread) && in perf_evsel__read()
318 !perf_mmap__read_self(MMAP(evsel, cpu, thread), count)) in perf_evsel__read()
321 if (readn(*fd, count->values, size) <= 0) in perf_evsel__read()
322 return -errno; in perf_evsel__read()
329 int cpu) in perf_evsel__run_ioctl() argument
333 for (thread = 0; thread < xyarray__max_y(evsel->fd); thread++) { in perf_evsel__run_ioctl()
335 int *fd = FD(evsel, cpu, thread); in perf_evsel__run_ioctl()
338 return -1; in perf_evsel__run_ioctl()
349 int perf_evsel__enable_cpu(struct perf_evsel *evsel, int cpu) in perf_evsel__enable_cpu() argument
351 return perf_evsel__run_ioctl(evsel, PERF_EVENT_IOC_ENABLE, NULL, cpu); in perf_evsel__enable_cpu()
359 for (i = 0; i < xyarray__max_x(evsel->fd) && !err; i++) in perf_evsel__enable()
364 int perf_evsel__disable_cpu(struct perf_evsel *evsel, int cpu) in perf_evsel__disable_cpu() argument
366 return perf_evsel__run_ioctl(evsel, PERF_EVENT_IOC_DISABLE, NULL, cpu); in perf_evsel__disable_cpu()
374 for (i = 0; i < xyarray__max_x(evsel->fd) && !err; i++) in perf_evsel__disable()
383 for (i = 0; i < evsel->cpus->nr && !err; i++) in perf_evsel__apply_filter()
392 return evsel->cpus; in perf_evsel__cpus()
397 return evsel->threads; in perf_evsel__threads()
402 return &evsel->attr; in perf_evsel__attr()
410 if (evsel->system_wide) in perf_evsel__alloc_id()
413 evsel->sample_id = xyarray__new(ncpus, nthreads, sizeof(struct perf_sample_id)); in perf_evsel__alloc_id()
414 if (evsel->sample_id == NULL) in perf_evsel__alloc_id()
415 return -ENOMEM; in perf_evsel__alloc_id()
417 evsel->id = zalloc(ncpus * nthreads * sizeof(u64)); in perf_evsel__alloc_id()
418 if (evsel->id == NULL) { in perf_evsel__alloc_id()
419 xyarray__delete(evsel->sample_id); in perf_evsel__alloc_id()
420 evsel->sample_id = NULL; in perf_evsel__alloc_id()
421 return -ENOMEM; in perf_evsel__alloc_id()
429 xyarray__delete(evsel->sample_id); in perf_evsel__free_id()
430 evsel->sample_id = NULL; in perf_evsel__free_id()
431 zfree(&evsel->id); in perf_evsel__free_id()
432 evsel->ids = 0; in perf_evsel__free_id()