Lines Matching refs:reader
56 struct perf_reader *reader = calloc(1, sizeof(struct perf_reader)); in perf_reader_new() local
57 if (!reader) in perf_reader_new()
59 reader->raw_cb = raw_cb; in perf_reader_new()
60 reader->lost_cb = lost_cb; in perf_reader_new()
61 reader->cb_cookie = cb_cookie; in perf_reader_new()
62 reader->fd = -1; in perf_reader_new()
63 reader->page_size = getpagesize(); in perf_reader_new()
64 reader->page_cnt = page_cnt; in perf_reader_new()
65 return reader; in perf_reader_new()
70 struct perf_reader *reader = ptr; in perf_reader_free() local
72 while (!__sync_bool_compare_and_swap(&reader->rb_use_state, RB_NOT_USED, RB_USED_IN_MUNMAP)) { in perf_reader_free()
74 if (tid == reader->rb_read_tid) in perf_reader_free()
77 munmap(reader->base, reader->page_size * (reader->page_cnt + 1)); in perf_reader_free()
78 if (reader->fd >= 0) { in perf_reader_free()
79 ioctl(reader->fd, PERF_EVENT_IOC_DISABLE, 0); in perf_reader_free()
80 close(reader->fd); in perf_reader_free()
82 free(reader->buf); in perf_reader_free()
87 int perf_reader_mmap(struct perf_reader *reader) { in perf_reader_mmap() argument
88 int mmap_size = reader->page_size * (reader->page_cnt + 1); in perf_reader_mmap()
90 if (reader->fd < 0) { in perf_reader_mmap()
95 reader->base = mmap(NULL, mmap_size, PROT_READ | PROT_WRITE , MAP_SHARED, reader->fd, 0); in perf_reader_mmap()
96 if (reader->base == MAP_FAILED) { in perf_reader_mmap()
116 static void parse_sw(struct perf_reader *reader, void *data, int size) { in parse_sw() argument
144 if (reader->raw_cb) in parse_sw()
145 reader->raw_cb(reader->cb_cookie, raw->data, raw->size); in parse_sw()
159 void perf_reader_event_read(struct perf_reader *reader) { in perf_reader_event_read() argument
160 volatile struct perf_event_mmap_page *perf_header = reader->base; in perf_reader_event_read()
161 uint64_t buffer_size = (uint64_t)reader->page_size * reader->page_cnt; in perf_reader_event_read()
163 uint8_t *base = (uint8_t *)reader->base + reader->page_size; in perf_reader_event_read()
164 uint8_t *sentinel = (uint8_t *)reader->base + buffer_size + reader->page_size; in perf_reader_event_read()
167 reader->rb_read_tid = syscall(__NR_gettid); in perf_reader_event_read()
168 if (!__sync_bool_compare_and_swap(&reader->rb_use_state, RB_NOT_USED, RB_USED_IN_READ)) in perf_reader_event_read()
186 reader->buf = realloc(reader->buf, e->size); in perf_reader_event_read()
188 memcpy(reader->buf, begin, len); in perf_reader_event_read()
189 memcpy((void *)((unsigned long)reader->buf + len), base, e->size - len); in perf_reader_event_read()
190 ptr = reader->buf; in perf_reader_event_read()
203 if (reader->lost_cb) { in perf_reader_event_read()
204 reader->lost_cb(reader->cb_cookie, lost); in perf_reader_event_read()
209 parse_sw(reader, ptr, e->size); in perf_reader_event_read()
216 reader->rb_use_state = RB_NOT_USED; in perf_reader_event_read()
218 reader->rb_read_tid = 0; in perf_reader_event_read()
239 void perf_reader_set_fd(struct perf_reader *reader, int fd) { in perf_reader_set_fd() argument
240 reader->fd = fd; in perf_reader_set_fd()
243 int perf_reader_fd(struct perf_reader *reader) { in perf_reader_fd() argument
244 return reader->fd; in perf_reader_fd()