From e049dea5b280bebd6480823a4cddd70baf46fea7 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Wed, 26 Apr 2017 03:32:06 -0700 Subject: anv/allocator: Return a null state for zero-size allocations Reviewed-by: Juan A. Suarez Romero --- src/intel/vulkan/anv_allocator.c | 9 +++++++++ src/intel/vulkan/anv_private.h | 2 ++ 2 files changed, 11 insertions(+) diff --git a/src/intel/vulkan/anv_allocator.c b/src/intel/vulkan/anv_allocator.c index 4cd80590c70..6358566ae2e 100644 --- a/src/intel/vulkan/anv_allocator.c +++ b/src/intel/vulkan/anv_allocator.c @@ -710,6 +710,9 @@ anv_state_pool_alloc_no_vg(struct anv_state_pool *pool, struct anv_state anv_state_pool_alloc(struct anv_state_pool *pool, size_t size, size_t align) { + if (size == 0) + return ANV_STATE_NULL; + struct anv_state state = anv_state_pool_alloc_no_vg(pool, size, align); VG(VALGRIND_MEMPOOL_ALLOC(pool, state.map, size)); return state; @@ -731,6 +734,9 @@ anv_state_pool_free_no_vg(struct anv_state_pool *pool, struct anv_state state) void anv_state_pool_free(struct anv_state_pool *pool, struct anv_state state) { + if (state.alloc_size == 0) + return; + VG(VALGRIND_MEMPOOL_FREE(pool, state.map)); anv_state_pool_free_no_vg(pool, state); } @@ -791,6 +797,9 @@ struct anv_state anv_state_stream_alloc(struct anv_state_stream *stream, uint32_t size, uint32_t alignment) { + if (size == 0) + return ANV_STATE_NULL; + struct anv_state_stream_block *sb = stream->block; struct anv_state state; diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index 21d0ac2122f..8652f105f92 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -490,6 +490,8 @@ struct anv_state { void *map; }; +#define ANV_STATE_NULL ((struct anv_state) { .alloc_size = 0 }) + struct anv_fixed_size_state_pool { size_t state_size; union anv_free_list free_list; -- cgit v1.2.3