Lines Matching refs:buf
61 struct bts_phys buf[0]; member
83 struct bts_buffer *buf; in bts_buffer_setup_aux() local
104 buf = kzalloc_node(offsetof(struct bts_buffer, buf[nbuf]), GFP_KERNEL, node); in bts_buffer_setup_aux()
105 if (!buf) in bts_buffer_setup_aux()
108 buf->nr_pages = nr_pages; in bts_buffer_setup_aux()
109 buf->nr_bufs = nbuf; in bts_buffer_setup_aux()
110 buf->snapshot = overwrite; in bts_buffer_setup_aux()
111 buf->data_pages = pages; in bts_buffer_setup_aux()
112 buf->real_size = size - size % BTS_RECORD_SIZE; in bts_buffer_setup_aux()
114 for (pg = 0, nbuf = 0, offset = 0, pad = 0; nbuf < buf->nr_bufs; nbuf++) { in bts_buffer_setup_aux()
119 buf->buf[nbuf].page = page; in bts_buffer_setup_aux()
120 buf->buf[nbuf].offset = offset; in bts_buffer_setup_aux()
121 buf->buf[nbuf].displacement = (pad ? BTS_RECORD_SIZE - pad : 0); in bts_buffer_setup_aux()
122 buf->buf[nbuf].size = buf_size(page) - buf->buf[nbuf].displacement; in bts_buffer_setup_aux()
123 pad = buf->buf[nbuf].size % BTS_RECORD_SIZE; in bts_buffer_setup_aux()
124 buf->buf[nbuf].size -= pad; in bts_buffer_setup_aux()
130 return buf; in bts_buffer_setup_aux()
138 static unsigned long bts_buffer_offset(struct bts_buffer *buf, unsigned int idx) in bts_buffer_offset() argument
140 return buf->buf[idx].offset + buf->buf[idx].displacement; in bts_buffer_offset()
144 bts_config_buffer(struct bts_buffer *buf) in bts_config_buffer() argument
148 struct bts_phys *phys = &buf->buf[buf->cur_buf]; in bts_config_buffer()
152 index = local_read(&buf->head); in bts_config_buffer()
154 if (!buf->snapshot) { in bts_config_buffer()
155 if (buf->end < phys->offset + buf_size(page)) in bts_config_buffer()
156 end = buf->end - phys->offset - phys->displacement; in bts_config_buffer()
171 ds->bts_interrupt_threshold = !buf->snapshot in bts_config_buffer()
187 struct bts_buffer *buf = perf_get_aux(&bts->handle); in bts_update() local
190 if (!buf) in bts_update()
193 head = index + bts_buffer_offset(buf, buf->cur_buf); in bts_update()
194 old = local_xchg(&buf->head, head); in bts_update()
196 if (!buf->snapshot) { in bts_update()
208 local_add(head - old, &buf->data_size); in bts_update()
210 local_set(&buf->data_size, head); in bts_update()
215 bts_buffer_reset(struct bts_buffer *buf, struct perf_output_handle *handle);
229 struct bts_buffer *buf = perf_get_aux(&bts->handle); in __bts_event_start() local
232 if (!buf->snapshot) in __bts_event_start()
239 bts_config_buffer(buf); in __bts_event_start()
258 struct bts_buffer *buf; in bts_event_start() local
260 buf = perf_aux_output_begin(&bts->handle, event); in bts_event_start()
261 if (!buf) in bts_event_start()
264 if (bts_buffer_reset(buf, &bts->handle)) in bts_event_start()
303 struct bts_buffer *buf = NULL; in bts_event_stop() local
310 buf = perf_get_aux(&bts->handle); in bts_event_stop()
317 if (buf) { in bts_event_stop()
318 if (buf->snapshot) in bts_event_stop()
320 local_xchg(&buf->data_size, in bts_event_stop()
321 buf->nr_pages << PAGE_SHIFT); in bts_event_stop()
323 local_xchg(&buf->data_size, 0)); in bts_event_stop()
369 bts_buffer_reset(struct bts_buffer *buf, struct perf_output_handle *handle) in bts_buffer_reset() argument
376 if (buf->snapshot) in bts_buffer_reset()
379 head = handle->head & ((buf->nr_pages << PAGE_SHIFT) - 1); in bts_buffer_reset()
381 phys = &buf->buf[buf->cur_buf]; in bts_buffer_reset()
390 next_buf = buf->cur_buf + 1; in bts_buffer_reset()
391 if (next_buf >= buf->nr_bufs) in bts_buffer_reset()
393 next_phys = &buf->buf[next_buf]; in bts_buffer_reset()
418 buf->cur_buf = next_buf; in bts_buffer_reset()
419 local_set(&buf->head, head); in bts_buffer_reset()
432 buf->end = head + space; in bts_buffer_reset()
449 struct bts_buffer *buf; in intel_bts_interrupt() local
467 buf = perf_get_aux(&bts->handle); in intel_bts_interrupt()
468 if (!buf) in intel_bts_interrupt()
476 if (buf->snapshot) in intel_bts_interrupt()
479 old_head = local_read(&buf->head); in intel_bts_interrupt()
483 if (old_head == local_read(&buf->head)) in intel_bts_interrupt()
486 perf_aux_output_end(&bts->handle, local_xchg(&buf->data_size, 0)); in intel_bts_interrupt()
488 buf = perf_aux_output_begin(&bts->handle, event); in intel_bts_interrupt()
489 if (buf) in intel_bts_interrupt()
490 err = bts_buffer_reset(buf, &bts->handle); in intel_bts_interrupt()
495 if (buf) { in intel_bts_interrupt()