On Thu, 2017-04-27 at 20:34 -0700, Jason Ekstrand wrote: > On Thu, Apr 27, 2017 at 9:20 AM, Juan A. Suarez Romero <[email protected]> > wrote: > > 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. > > > > The valgrind step has to be done at the last possible moment before we hand > the pointer back to the "user". With the state stream pulling from the state > pool, this means that, for anything allocated by the stream, it needs to be > done by the stream and not the pool. These helpers let us skip the valgrind > alloc/free markers when we're pulling through the stream until > state_stream_alloc/free. >
I see. Thanks for the explanation. Reviewed-by: Juan A. Suarez Romero <[email protected]> > --Jason > > > > > > > -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 */ > > _______________________________________________ > > mesa-dev mailing list > > [email protected] > > https://lists.freedesktop.org/mailman/listinfo/mesa-dev > > > > _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
