[Mesa-dev] [PATCH 01/18] anv/allocator: Add no-valgrind versions of state_pool_alloc/free

Juan A. Suarez Romero jasuarez at igalia.com
Thu Apr 27 16:20:41 UTC 2017


On Wed, 2017-04-26 at 07:35 -0700, Jason Ekstrand wrote:
> ---
>  src/intel/vulkan/anv_allocator.c | 24 +++++++++++++++++++-----
>  1 file changed, 19 insertions(+), 5 deletions(-)
> 
> diff --git a/src/intel/vulkan/anv_allocator.c b/src/intel/vulkan/anv_allocator.c
> index 784191e..594cf49 100644
> --- a/src/intel/vulkan/anv_allocator.c
> +++ b/src/intel/vulkan/anv_allocator.c
> @@ -684,8 +684,9 @@ anv_state_pool_finish(struct anv_state_pool *pool)
>     VG(VALGRIND_DESTROY_MEMPOOL(pool));
>  }
>  
> -struct anv_state
> -anv_state_pool_alloc(struct anv_state_pool *pool, size_t size, size_t align)
> +static struct anv_state
> +anv_state_pool_alloc_no_vg(struct anv_state_pool *pool,
> +                           size_t size, size_t align)
>  {
>     unsigned size_log2 = ilog2_round_up(size < align ? align : size);
>     assert(size_log2 <= ANV_MAX_STATE_SIZE_LOG2);
> @@ -698,12 +699,19 @@ anv_state_pool_alloc(struct anv_state_pool *pool, size_t size, size_t align)
>     state.offset = anv_fixed_size_state_pool_alloc(&pool->buckets[bucket],
>                                                    pool->block_pool);
>     state.map = pool->block_pool->map + state.offset;
> +   return state;
> +}
> +
> +struct anv_state
> +anv_state_pool_alloc(struct anv_state_pool *pool, size_t size, size_t align)
> +{
> +   struct anv_state state = anv_state_pool_alloc_no_vg(pool, size, align);
>     VG(VALGRIND_MEMPOOL_ALLOC(pool, state.map, size));
>     return state;
>  }
> 


Is it really worth to have a different function? I would understand if
the valgrind and no-valgrind where totally different.

>  
> -void
> -anv_state_pool_free(struct anv_state_pool *pool, struct anv_state state)
> +static void
> +anv_state_pool_free_no_vg(struct anv_state_pool *pool, struct anv_state state)
>  {
>     assert(util_is_power_of_two(state.alloc_size));
>     unsigned size_log2 = ilog2_round_up(state.alloc_size);
> @@ -711,11 +719,17 @@ anv_state_pool_free(struct anv_state_pool *pool, struct anv_state state)
>            size_log2 <= ANV_MAX_STATE_SIZE_LOG2);
>     unsigned bucket = size_log2 - ANV_MIN_STATE_SIZE_LOG2;
>  
> -   VG(VALGRIND_MEMPOOL_FREE(pool, state.map));
>     anv_fixed_size_state_pool_free(&pool->buckets[bucket],
>                                    pool->block_pool, state.offset);
>  }
>  
> +void
> +anv_state_pool_free(struct anv_state_pool *pool, struct anv_state state)
> +{
> +   VG(VALGRIND_MEMPOOL_FREE(pool, state.map));
> +   anv_state_pool_free_no_vg(pool, state);
> +}
> +
>  #define NULL_BLOCK 1
>  struct anv_state_stream_block {
>     /* The next block */


More information about the mesa-dev mailing list