Lines Matching refs:sfb
85 struct sf_buffer sfb; /* Sampling buffer */ member
110 return !!cpuhw->sfb.sdbt; in sf_buffer_available()
116 static void free_sampling_buffer(struct sf_buffer *sfb) in free_sampling_buffer() argument
120 if (!sfb->sdbt) in free_sampling_buffer()
123 sdbt = sfb->sdbt; in free_sampling_buffer()
138 if (curr == sfb->sdbt) in free_sampling_buffer()
152 "free_sampling_buffer: freed sdbt=%p\n", sfb->sdbt); in free_sampling_buffer()
153 memset(sfb, 0, sizeof(*sfb)); in free_sampling_buffer()
184 static int realloc_sampling_buffer(struct sf_buffer *sfb, in realloc_sampling_buffer() argument
190 if (!sfb->sdbt || !sfb->tail) in realloc_sampling_buffer()
193 if (!is_link_entry(sfb->tail)) in realloc_sampling_buffer()
201 tail = sfb->tail; in realloc_sampling_buffer()
206 if (sfb->sdbt != get_next_sdbt(tail)) { in realloc_sampling_buffer()
210 (void *) sfb->sdbt, (void *) tail); in realloc_sampling_buffer()
224 sfb->num_sdbt++; in realloc_sampling_buffer()
238 sfb->num_sdb++; in realloc_sampling_buffer()
243 *tail = (unsigned long) sfb->sdbt + 1; in realloc_sampling_buffer()
244 sfb->tail = tail; in realloc_sampling_buffer()
248 sfb->num_sdbt, sfb->num_sdb); in realloc_sampling_buffer()
263 static int alloc_sampling_buffer(struct sf_buffer *sfb, unsigned long num_sdb) in alloc_sampling_buffer() argument
267 if (sfb->sdbt) in alloc_sampling_buffer()
271 sfb->sdbt = (unsigned long *) get_zeroed_page(GFP_KERNEL); in alloc_sampling_buffer()
272 if (!sfb->sdbt) in alloc_sampling_buffer()
274 sfb->num_sdb = 0; in alloc_sampling_buffer()
275 sfb->num_sdbt = 1; in alloc_sampling_buffer()
280 sfb->tail = sfb->sdbt; in alloc_sampling_buffer()
281 *sfb->tail = (unsigned long)(void *) sfb->sdbt + 1; in alloc_sampling_buffer()
284 rc = realloc_sampling_buffer(sfb, num_sdb, GFP_KERNEL); in alloc_sampling_buffer()
286 free_sampling_buffer(sfb); in alloc_sampling_buffer()
292 sfb->sdbt, (void *) *sfb->sdbt); in alloc_sampling_buffer()
314 static unsigned long sfb_pending_allocs(struct sf_buffer *sfb, in sfb_pending_allocs() argument
317 if (!sfb->sdbt) in sfb_pending_allocs()
319 if (SFB_ALLOC_REG(hwc) > sfb->num_sdb) in sfb_pending_allocs()
320 return SFB_ALLOC_REG(hwc) - sfb->num_sdb; in sfb_pending_allocs()
324 static int sfb_has_pending_allocs(struct sf_buffer *sfb, in sfb_has_pending_allocs() argument
327 return sfb_pending_allocs(sfb, hwc) > 0; in sfb_has_pending_allocs()
362 if (cpuhw->sfb.sdbt) in deallocate_buffers()
363 free_sampling_buffer(&cpuhw->sfb); in deallocate_buffers()
448 return alloc_sampling_buffer(&cpuhw->sfb, in allocate_buffers()
449 sfb_pending_allocs(&cpuhw->sfb, hwc)); in allocate_buffers()
496 ratio = DIV_ROUND_UP(100 * OVERFLOW_REG(hwc) * cpuhw->sfb.num_sdb, in sfb_account_overflows()
500 num = compute_sfb_extent(ratio, cpuhw->sfb.num_sdb); in sfb_account_overflows()
520 static void extend_sampling_buffer(struct sf_buffer *sfb, in extend_sampling_buffer() argument
526 num = sfb_pending_allocs(sfb, hwc); in extend_sampling_buffer()
529 num_old = sfb->num_sdb; in extend_sampling_buffer()
541 rc = realloc_sampling_buffer(sfb, num, GFP_ATOMIC); in extend_sampling_buffer()
546 if (sfb_has_pending_allocs(sfb, hwc)) in extend_sampling_buffer()
549 num, sfb->num_sdb - num_old, in extend_sampling_buffer()
550 sfb_pending_allocs(sfb, hwc)); in extend_sampling_buffer()
877 if (sfb_has_pending_allocs(&cpuhw->sfb, hwc)) in cpumsf_pmu_enable()
878 extend_sampling_buffer(&cpuhw->sfb, hwc); in cpumsf_pmu_enable()
1354 if (!cpuhw->sfb.sdbt) in cpumsf_pmu_add()
1369 cpuhw->lsctl.tear = (unsigned long) cpuhw->sfb.sdbt; in cpumsf_pmu_add()
1370 cpuhw->lsctl.dear = *(unsigned long *) cpuhw->sfb.sdbt; in cpumsf_pmu_add()
1372 hw_reset_registers(&event->hw, cpuhw->sfb.sdbt); in cpumsf_pmu_add()