Hi, Thanks for catching this bug!
Reviewed-by: Bruno Jiménez <[email protected]> Also, could you please send me a copy of the tests? On Thu, 2014-06-19 at 10:21 -0400, Jan Vesely wrote: > The important part is the change of the condition to <= 0. Otherwise the loop > gets stuck never actually growing the pool. > > The change in the aux-need calculation guarantees max 2 iterations, and > avoids wasting memory in case a smaller item can't fit into a relatively > larger > pool. > > Signed-off-by: Jan Vesely <[email protected]> > CC: Bruno Jimenez <[email protected]> > --- > > This fixes hang in gegl colors.xml test > > src/gallium/drivers/r600/compute_memory_pool.c | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/src/gallium/drivers/r600/compute_memory_pool.c > b/src/gallium/drivers/r600/compute_memory_pool.c > index ec8c470..0b6d2da6 100644 > --- a/src/gallium/drivers/r600/compute_memory_pool.c > +++ b/src/gallium/drivers/r600/compute_memory_pool.c > @@ -320,8 +320,11 @@ int compute_memory_finalize_pending(struct > compute_memory_pool* pool, > int64_t need = item->size_in_dw+2048 - > (pool->size_in_dw - allocated); > > - if (need < 0) { > - need = pool->size_in_dw / 10; > + if (need <= 0) { > + /* There's enough free space, but it's too > + * fragmented. Assume half of the item can fit > + * int the last chunk */ > + need = (item->size_in_dw / 2) + ITEM_ALIGNMENT; > } > > need = align(need, ITEM_ALIGNMENT); _______________________________________________ mesa-dev mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-dev
