Lines Matching refs:reader
57 struct perf_reader *reader = calloc(1, sizeof(struct perf_reader)); in perf_reader_new() local
58 if (!reader) in perf_reader_new()
60 reader->raw_cb = raw_cb; in perf_reader_new()
61 reader->lost_cb = lost_cb; in perf_reader_new()
62 reader->cb_cookie = cb_cookie; in perf_reader_new()
63 reader->fd = -1; in perf_reader_new()
64 reader->page_size = getpagesize(); in perf_reader_new()
65 reader->page_cnt = page_cnt; in perf_reader_new()
66 return reader; in perf_reader_new()
71 struct perf_reader *reader = ptr; in perf_reader_free() local
73 while (!__sync_bool_compare_and_swap(&reader->rb_use_state, RB_NOT_USED, RB_USED_IN_MUNMAP)) { in perf_reader_free()
75 if (tid == reader->rb_read_tid) in perf_reader_free()
78 munmap(reader->base, reader->page_size * (reader->page_cnt + 1)); in perf_reader_free()
79 if (reader->fd >= 0) { in perf_reader_free()
80 ioctl(reader->fd, PERF_EVENT_IOC_DISABLE, 0); in perf_reader_free()
81 close(reader->fd); in perf_reader_free()
83 free(reader->buf); in perf_reader_free()
88 int perf_reader_mmap(struct perf_reader *reader) { in perf_reader_mmap() argument
89 int mmap_size = reader->page_size * (reader->page_cnt + 1); in perf_reader_mmap()
91 if (reader->fd < 0) { in perf_reader_mmap()
96 reader->base = mmap(NULL, mmap_size, PROT_READ | PROT_WRITE, MAP_SHARED, reader->fd, 0); in perf_reader_mmap()
97 if (reader->base == MAP_FAILED) { in perf_reader_mmap()
117 static void parse_sw(struct perf_reader *reader, void *data, int size) { in parse_sw() argument
145 if (reader->raw_cb) in parse_sw()
146 reader->raw_cb(reader->cb_cookie, raw->data, raw->size); in parse_sw()
160 void perf_reader_event_read(struct perf_reader *reader) { in perf_reader_event_read() argument
161 volatile struct perf_event_mmap_page *perf_header = reader->base; in perf_reader_event_read()
162 uint64_t buffer_size = (uint64_t)reader->page_size * reader->page_cnt; in perf_reader_event_read()
164 uint8_t *base = (uint8_t *)reader->base + reader->page_size; in perf_reader_event_read()
165 uint8_t *sentinel = (uint8_t *)reader->base + buffer_size + reader->page_size; in perf_reader_event_read()
168 reader->rb_read_tid = syscall(__NR_gettid); in perf_reader_event_read()
169 if (!__sync_bool_compare_and_swap(&reader->rb_use_state, RB_NOT_USED, RB_USED_IN_READ)) in perf_reader_event_read()
187 reader->buf = realloc(reader->buf, e->size); in perf_reader_event_read()
189 memcpy(reader->buf, begin, len); in perf_reader_event_read()
190 memcpy((void *)((unsigned long)reader->buf + len), base, e->size - len); in perf_reader_event_read()
191 ptr = reader->buf; in perf_reader_event_read()
204 if (reader->lost_cb) { in perf_reader_event_read()
205 reader->lost_cb(reader->cb_cookie, lost); in perf_reader_event_read()
210 parse_sw(reader, ptr, e->size); in perf_reader_event_read()
217 reader->rb_use_state = RB_NOT_USED; in perf_reader_event_read()
219 reader->rb_read_tid = 0; in perf_reader_event_read()
248 void perf_reader_set_fd(struct perf_reader *reader, int fd) { in perf_reader_set_fd() argument
249 reader->fd = fd; in perf_reader_set_fd()
252 int perf_reader_fd(struct perf_reader *reader) { in perf_reader_fd() argument
253 return reader->fd; in perf_reader_fd()