[PATCH 2/5] drm/exec: don't immediately add the prelocked obj
Thomas Hellström
thomas.hellstrom at linux.intel.com
Wed Jul 3 15:51:27 UTC 2024
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?
/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