mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-04-22 09:40:40 +02:00
zink: only retry bo allocation after reclaim if reclaims actually happened
this should cut down on allocation error spam Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23073>
This commit is contained in:
parent
d4757ea67e
commit
3d22bcb790
1 changed files with 9 additions and 9 deletions
|
|
@ -193,16 +193,18 @@ bo_slab_destroy(struct zink_screen *screen, struct pb_buffer *pbuf)
|
|||
pb_slab_free(get_slabs(screen, bo->base.size, 0), &bo->u.slab.entry);
|
||||
}
|
||||
|
||||
static void
|
||||
static bool
|
||||
clean_up_buffer_managers(struct zink_screen *screen)
|
||||
{
|
||||
unsigned num_reclaims = 0;
|
||||
for (unsigned i = 0; i < NUM_SLAB_ALLOCATORS; i++) {
|
||||
pb_slabs_reclaim(&screen->pb.bo_slabs[i]);
|
||||
num_reclaims += pb_slabs_reclaim(&screen->pb.bo_slabs[i]);
|
||||
//if (screen->info.has_tmz_support)
|
||||
//pb_slabs_reclaim(&screen->bo_slabs_encrypted[i]);
|
||||
}
|
||||
|
||||
pb_cache_release_all_buffers(&screen->pb.bo_cache);
|
||||
num_reclaims += pb_cache_release_all_buffers(&screen->pb.bo_cache);
|
||||
return !!num_reclaims;
|
||||
}
|
||||
|
||||
static unsigned
|
||||
|
|
@ -629,9 +631,8 @@ zink_bo_create(struct zink_screen *screen, uint64_t size, unsigned alignment, en
|
|||
entry = pb_slab_alloc_reclaimed(slabs, alloc_size, mem_type_idx, reclaim_all);
|
||||
if (!entry) {
|
||||
/* Clean up buffer managers and try again. */
|
||||
clean_up_buffer_managers(screen);
|
||||
|
||||
entry = pb_slab_alloc_reclaimed(slabs, alloc_size, mem_type_idx, true);
|
||||
if (clean_up_buffer_managers(screen))
|
||||
entry = pb_slab_alloc_reclaimed(slabs, alloc_size, mem_type_idx, true);
|
||||
}
|
||||
if (!entry)
|
||||
return NULL;
|
||||
|
|
@ -676,9 +677,8 @@ no_slab:
|
|||
bo = bo_create_internal(screen, size, alignment, heap, mem_type_idx, flags, pNext);
|
||||
if (!bo) {
|
||||
/* Clean up buffer managers and try again. */
|
||||
clean_up_buffer_managers(screen);
|
||||
|
||||
bo = bo_create_internal(screen, size, alignment, heap, mem_type_idx, flags, pNext);
|
||||
if (clean_up_buffer_managers(screen))
|
||||
bo = bo_create_internal(screen, size, alignment, heap, mem_type_idx, flags, pNext);
|
||||
if (!bo)
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue