On Mon, Jun 21, 2021 at 03:03:27PM +0200, Christian König wrote: > We actually need to wait for the moving fence after pinning > the BO to make sure that the pin is completed. > > Signed-off-by: Christian König <christian.koenig@xxxxxxx> > CC: stable@xxxxxxxxxx > --- > drivers/gpu/drm/radeon/radeon_prime.c | 16 +++++++++++++--- > 1 file changed, 13 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/radeon/radeon_prime.c b/drivers/gpu/drm/radeon/radeon_prime.c > index 42a87948e28c..4a90807351e7 100644 > --- a/drivers/gpu/drm/radeon/radeon_prime.c > +++ b/drivers/gpu/drm/radeon/radeon_prime.c > @@ -77,9 +77,19 @@ int radeon_gem_prime_pin(struct drm_gem_object *obj) > > /* pin buffer into GTT */ > ret = radeon_bo_pin(bo, RADEON_GEM_DOMAIN_GTT, NULL); > - if (likely(ret == 0)) > - bo->prime_shared_count++; > - > + if (unlikely(ret)) > + goto error; > + > + if (bo->tbo.moving) { > + ret = dma_fence_wait(bo->tbo.moving, false); Here we wait whil holding the reservation, so we should be all fine. Maybe not the nicest to wait while locked, but also I don't think it'll matter. Reviewed-by: Daniel Vetter <daniel.vetter@xxxxxxxx> > + if (unlikely(ret)) { > + radeon_bo_unpin(bo); > + goto error; > + } > + } > + > + bo->prime_shared_count++; > +error: > radeon_bo_unreserve(bo); > return ret; > } > -- > 2.25.1 > -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch