Lines Matching refs:pb

13032 	struct perf_buffer *pb;
13056 static void perf_buffer__free_cpu_buf(struct perf_buffer *pb,
13062 munmap(cpu_buf->base, pb->mmap_size + pb->page_size))
13072 void perf_buffer__free(struct perf_buffer *pb)
13076 if (IS_ERR_OR_NULL(pb))
13078 if (pb->cpu_bufs) {
13079 for (i = 0; i < pb->cpu_cnt; i++) {
13080 struct perf_cpu_buf *cpu_buf = pb->cpu_bufs[i];
13085 bpf_map_delete_elem(pb->map_fd, &cpu_buf->map_key);
13086 perf_buffer__free_cpu_buf(pb, cpu_buf);
13088 free(pb->cpu_bufs);
13090 if (pb->epoll_fd >= 0)
13091 close(pb->epoll_fd);
13092 free(pb->events);
13093 free(pb);
13097 perf_buffer__open_cpu_buf(struct perf_buffer *pb, struct perf_event_attr *attr,
13108 cpu_buf->pb = pb;
13121 cpu_buf->base = mmap(NULL, pb->mmap_size + pb->page_size,
13142 perf_buffer__free_cpu_buf(pb, cpu_buf);
13212 struct perf_buffer *pb;
13247 pb = calloc(1, sizeof(*pb));
13248 if (!pb)
13251 pb->event_cb = p->event_cb;
13252 pb->sample_cb = p->sample_cb;
13253 pb->lost_cb = p->lost_cb;
13254 pb->ctx = p->ctx;
13256 pb->page_size = getpagesize();
13257 pb->mmap_size = pb->page_size * page_cnt;
13258 pb->map_fd = map_fd;
13260 pb->epoll_fd = epoll_create1(EPOLL_CLOEXEC);
13261 if (pb->epoll_fd < 0) {
13269 pb->cpu_cnt = p->cpu_cnt;
13271 pb->cpu_cnt = libbpf_num_possible_cpus();
13272 if (pb->cpu_cnt < 0) {
13273 err = pb->cpu_cnt;
13276 if (map.max_entries && map.max_entries < pb->cpu_cnt)
13277 pb->cpu_cnt = map.max_entries;
13280 pb->events = calloc(pb->cpu_cnt, sizeof(*pb->events));
13281 if (!pb->events) {
13286 pb->cpu_bufs = calloc(pb->cpu_cnt, sizeof(*pb->cpu_bufs));
13287 if (!pb->cpu_bufs) {
13299 for (i = 0, j = 0; i < pb->cpu_cnt; i++) {
13312 cpu_buf = perf_buffer__open_cpu_buf(pb, p->attr, cpu, map_key);
13318 pb->cpu_bufs[j] = cpu_buf;
13320 err = bpf_map_update_elem(pb->map_fd, &map_key,
13330 pb->events[j].events = EPOLLIN;
13331 pb->events[j].data.ptr = cpu_buf;
13332 if (epoll_ctl(pb->epoll_fd, EPOLL_CTL_ADD, cpu_buf->fd,
13333 &pb->events[j]) < 0) {
13342 pb->cpu_cnt = j;
13345 return pb;
13349 if (pb)
13350 perf_buffer__free(pb);
13371 struct perf_buffer *pb = cpu_buf->pb;
13375 if (pb->event_cb)
13376 return pb->event_cb(pb->ctx, cpu_buf->cpu, e);
13382 if (pb->sample_cb)
13383 pb->sample_cb(pb->ctx, cpu_buf->cpu, s->data, s->size);
13389 if (pb->lost_cb)
13390 pb->lost_cb(pb->ctx, cpu_buf->cpu, s->lost);
13400 static int perf_buffer__process_records(struct perf_buffer *pb,
13405 ret = perf_event_read_simple(cpu_buf->base, pb->mmap_size,
13406 pb->page_size, &cpu_buf->buf,
13414 int perf_buffer__epoll_fd(const struct perf_buffer *pb)
13416 return pb->epoll_fd;
13419 int perf_buffer__poll(struct perf_buffer *pb, int timeout_ms)
13423 cnt = epoll_wait(pb->epoll_fd, pb->events, pb->cpu_cnt, timeout_ms);
13428 struct perf_cpu_buf *cpu_buf = pb->events[i].data.ptr;
13430 err = perf_buffer__process_records(pb, cpu_buf);
13442 size_t perf_buffer__buffer_cnt(const struct perf_buffer *pb)
13444 return pb->cpu_cnt;
13452 int perf_buffer__buffer_fd(const struct perf_buffer *pb, size_t buf_idx)
13456 if (buf_idx >= pb->cpu_cnt)
13459 cpu_buf = pb->cpu_bufs[buf_idx];
13466 int perf_buffer__buffer(struct perf_buffer *pb, int buf_idx, void **buf, size_t *buf_size)
13470 if (buf_idx >= pb->cpu_cnt)
13473 cpu_buf = pb->cpu_bufs[buf_idx];
13478 *buf_size = pb->mmap_size;
13490 int perf_buffer__consume_buffer(struct perf_buffer *pb, size_t buf_idx)
13494 if (buf_idx >= pb->cpu_cnt)
13497 cpu_buf = pb->cpu_bufs[buf_idx];
13501 return perf_buffer__process_records(pb, cpu_buf);
13504 int perf_buffer__consume(struct perf_buffer *pb)
13508 for (i = 0; i < pb->cpu_cnt; i++) {
13509 struct perf_cpu_buf *cpu_buf = pb->cpu_bufs[i];
13514 err = perf_buffer__process_records(pb, cpu_buf);