asahi: Fix incorrect BO bitmap reallocations

If the BO handle is greater than 2x what fits inside the current bitmap
size, then we end up overflowing. Make sure to always reallocate to a
large enough bitmap, not just 2x the previous size.

Found while replaying firefox apitraces with looping (which apparently
leaks a ton of objects, but that might just be apitrace).

Signed-off-by: Asahi Lina <lina@asahilina.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24635>
This commit is contained in:
Asahi Lina 2023-08-11 17:04:00 +09:00 committed by Marge Bot
parent f1fedb72d3
commit c247de37bb

View file

@ -707,10 +707,14 @@ agx_batch_add_bo(struct agx_batch *batch, struct agx_bo *bo)
{
/* Double the size of the BO list if we run out, this is amortized O(1) */
if (unlikely(bo->handle > agx_batch_bo_list_bits(batch))) {
unsigned word_count =
MAX2(batch->bo_list.word_count * 2,
util_next_power_of_two(BITSET_WORDS(bo->handle + 1)));
batch->bo_list.set =
rerzalloc(batch->ctx, batch->bo_list.set, BITSET_WORD,
batch->bo_list.word_count, batch->bo_list.word_count * 2);
batch->bo_list.word_count *= 2;
batch->bo_list.word_count, word_count);
batch->bo_list.word_count = word_count;
}
/* The batch holds a single reference to each BO in the batch, released when