[Mesa-dev] [PATCH 2/2] r600: Handle failures in compute_memory_pool_finalize

Tom Stellard tom at stellard.net
Thu Jun 19 08:34:44 PDT 2014


On Thu, Jun 19, 2014 at 11:22:28AM -0400, Jan Vesely wrote:
> On Thu, 2014-06-19 at 17:12 +0200, Bruno Jimenez wrote:
> > Hi,
> > 
> > To which failure are you refering? Could you please send me a
> > test/program that I can try to track this down?
> 
> well, the compute_memory_finalize_pending() function can possibly return
> -1 so it's prudent to check for it.
> 
> as for the testcase, I replaced the inside of 'if (need <= 0)' in the
> previous patch with return -1 (to simulate failure). The I used GEGL
> test op colors.xml to trigger the situation.
> 
> but gegl needs some extra patches to get working on current mesa/clover.
> I can send you log with R600_DEBUG=compute if it helps.
> 

Have you ever looked into integrated the gegl tests with piglit, like we've
done for opencv.  This would make it much easier for other devs to execute
these tests.

-Tom

> 
> regards,
> Jan
> 
> 
> > 
> > Thanks!
> > Bruno
> > 
> > On Thu, 2014-06-19 at 10:21 -0400, Jan Vesely wrote:
> > > Signed-off-by: Jan Vesely <jan.vesely at rutgers.edu>
> > > CC: Bruno Jimenez <brunojimen at gmail.com>
> > > ---
> > > 
> > > The failure now hits assertion compute_memory_pool.c:408, instead of
> > > u_inlines.h:275:pipe_buffer_map_range: Assertion `offset < buffer->width0'
> > > 
> > >  src/gallium/drivers/r600/evergreen_compute.c | 9 +++++++--
> > >  1 file changed, 7 insertions(+), 2 deletions(-)
> > > 
> > > diff --git a/src/gallium/drivers/r600/evergreen_compute.c b/src/gallium/drivers/r600/evergreen_compute.c
> > > index a2abf15..bd6e720 100644
> > > --- a/src/gallium/drivers/r600/evergreen_compute.c
> > > +++ b/src/gallium/drivers/r600/evergreen_compute.c
> > > @@ -659,7 +659,10 @@ static void evergreen_set_global_binding(
> > >  		return;
> > >  	}
> > >  
> > > -	compute_memory_finalize_pending(pool, ctx_);
> > > +	if (compute_memory_finalize_pending(pool, ctx_) == -1) {
> > > +		/* XXX: Unset */
> > > +		return;
> > > +	}
> > >  
> > >  	for (int i = 0; i < n; i++)
> > >  	{
> > > @@ -967,7 +970,9 @@ void *r600_compute_global_transfer_map(
> > >  		"%u (box.x)\n", buffer->chunk->id, box->x);
> > >  
> > > 
> > > -	compute_memory_finalize_pending(pool, ctx_);
> > > +	if (compute_memory_finalize_pending(pool, ctx_) == -1) {
> > > +		return NULL;
> > > +	}
> > >  
> > >  	assert(resource->target == PIPE_BUFFER);
> > >  	assert(resource->bind & PIPE_BIND_GLOBAL);
> > 
> > 
> 
> -- 
> Jan Vesely <jan.vesely at rutgers.edu>



> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev



More information about the mesa-dev mailing list