[PATCH 2/5] drm/exec: don't immediately add the prelocked obj

Thomas Hellström thomas.hellstrom at linux.intel.com
Fri Jul 5 13:33:38 UTC 2024


On Fri, 2024-07-05 at 14:41 +0200, Christian König wrote:
> Am 03.07.24 um 17:51 schrieb Thomas Hellström:
> > On Wed, 2024-07-03 at 15:25 +0200, Christian König wrote:
> > > Some contended objects might never be locked again in the case of
> > > eviction
> > > handling for example.
> > > 
> > > Make sure that those doesn't show up in the list of locked
> > > objects
> > > until
> > > they are explicitely mentioned.
> > Could you be a bit more specific in the commit message about in
> > what
> > situations that is bad?
> 
> The prelocked object is not necessarily expected to be in the list of
> locked objects.
> 
> I ran into issues because amdgpu tried to validate all locked objects
> and so tried to also validate the prelocked one (which was only
> locked 
> for eviction).
> 
> That obviously didn't made much sense.

Indeed. Could you add a similar description to the commit message?

/Thomas



> 
> Regards,
> Christian.
> 
> > 
> > /Thomas
> > 
> > 
> > 
> > > Signed-off-by: Christian König <christian.koenig at amd.com>
> > > ---
> > >   drivers/gpu/drm/drm_exec.c | 18 +++++++++---------
> > >   1 file changed, 9 insertions(+), 9 deletions(-)
> > > 
> > > diff --git a/drivers/gpu/drm/drm_exec.c
> > > b/drivers/gpu/drm/drm_exec.c
> > > index 2da094bdf8a4..220df336fbd9 100644
> > > --- a/drivers/gpu/drm/drm_exec.c
> > > +++ b/drivers/gpu/drm/drm_exec.c
> > > @@ -61,8 +61,11 @@ static void drm_exec_unlock_all(struct
> > > drm_exec
> > > *exec)
> > >   		drm_gem_object_put(obj);
> > >   	}
> > >   
> > > -	drm_gem_object_put(exec->prelocked);
> > > -	exec->prelocked = NULL;
> > > +	if (exec->prelocked) {
> > > +		dma_resv_unlock(exec->prelocked->resv);
> > > +		drm_gem_object_put(exec->prelocked);
> > > +		exec->prelocked = NULL;
> > > +	}
> > >   }
> > >   
> > >   /**
> > > @@ -179,16 +182,9 @@ static int drm_exec_lock_contended(struct
> > > drm_exec *exec)
> > >   		dma_resv_lock_slow(obj->resv, &exec->ticket);
> > >   	}
> > >   
> > > -	ret = drm_exec_obj_locked(exec, obj);
> > > -	if (unlikely(ret))
> > > -		goto error_unlock;
> > > -
> > >   	exec->prelocked = obj;
> > >   	return 0;
> > >   
> > > -error_unlock:
> > > -	dma_resv_unlock(obj->resv);
> > > -
> > >   error_dropref:
> > >   	drm_gem_object_put(obj);
> > >   	return ret;
> > > @@ -214,6 +210,10 @@ int drm_exec_lock_obj(struct drm_exec *exec,
> > > struct drm_gem_object *obj)
> > >   		return ret;
> > >   
> > >   	if (exec->prelocked == obj) {
> > > +		ret = drm_exec_obj_locked(exec, obj);
> > > +		if (unlikely(ret))
> > > +			return ret;
> > > +
> > >   		drm_gem_object_put(exec->prelocked);
> > >   		exec->prelocked = NULL;
> > >   		return 0;
> 



More information about the dri-devel mailing list