On Fri, Jul 27, 2018 at 03:39:01PM +0200, Christian König wrote:
> Otherwise we silently don't use a BO list when the handle is invalid.
> 
> Signed-off-by: Christian König <[email protected]>

Reviewed-by: Huang Rui <[email protected]>

> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu.h         |  4 ++--
>  drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c | 28 ++++++++++------------------
>  drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c      | 11 ++++++++---
>  3 files changed, 20 insertions(+), 23 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> index 13aaa118aca4..4cd20e722d70 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> @@ -713,8 +713,8 @@ struct amdgpu_bo_list {
>       struct amdgpu_bo_list_entry *array;
>  };
>  
> -struct amdgpu_bo_list *
> -amdgpu_bo_list_get(struct amdgpu_fpriv *fpriv, int id);
> +int amdgpu_bo_list_get(struct amdgpu_fpriv *fpriv, int id,
> +                    struct amdgpu_bo_list **result);
>  void amdgpu_bo_list_get_list(struct amdgpu_bo_list *list,
>                            struct list_head *validated);
>  void amdgpu_bo_list_put(struct amdgpu_bo_list *list);
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c
> index 7679c068c89a..944868e47119 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c
> @@ -180,27 +180,20 @@ static int amdgpu_bo_list_set(struct amdgpu_device 
> *adev,
>       return r;
>  }
>  
> -struct amdgpu_bo_list *
> -amdgpu_bo_list_get(struct amdgpu_fpriv *fpriv, int id)
> +int amdgpu_bo_list_get(struct amdgpu_fpriv *fpriv, int id,
> +                    struct amdgpu_bo_list **result)
>  {
> -     struct amdgpu_bo_list *result;
> -
>       rcu_read_lock();
> -     result = idr_find(&fpriv->bo_list_handles, id);
> +     *result = idr_find(&fpriv->bo_list_handles, id);
>  
> -     if (result) {
> -             if (kref_get_unless_zero(&result->refcount)) {
> -                     rcu_read_unlock();
> -                     mutex_lock(&result->lock);
> -             } else {
> -                     rcu_read_unlock();
> -                     result = NULL;
> -             }
> -     } else {
> +     if (*result && kref_get_unless_zero(&(*result)->refcount)) {
>               rcu_read_unlock();
> +             mutex_lock(&(*result)->lock);
> +             return 0;
>       }
>  
> -     return result;
> +     rcu_read_unlock();
> +     return -ENOENT;
>  }
>  
>  void amdgpu_bo_list_get_list(struct amdgpu_bo_list *list,
> @@ -335,9 +328,8 @@ int amdgpu_bo_list_ioctl(struct drm_device *dev, void 
> *data,
>               break;
>  
>       case AMDGPU_BO_LIST_OP_UPDATE:
> -             r = -ENOENT;
> -             list = amdgpu_bo_list_get(fpriv, handle);
> -             if (!list)
> +             r = amdgpu_bo_list_get(fpriv, handle, &list);
> +             if (r)
>                       goto error_free;
>  
>               r = amdgpu_bo_list_set(adev, filp, list, info,
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> index 533b2e7656c0..8a49c3b97bd4 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> @@ -572,11 +572,16 @@ static int amdgpu_cs_parser_bos(struct amdgpu_cs_parser 
> *p,
>       INIT_LIST_HEAD(&p->validated);
>  
>       /* p->bo_list could already be assigned if AMDGPU_CHUNK_ID_BO_HANDLES 
> is present */
> -     if (!p->bo_list)
> -             p->bo_list = amdgpu_bo_list_get(fpriv, cs->in.bo_list_handle);
> -     else
> +     if (p->bo_list) {
>               mutex_lock(&p->bo_list->lock);
>  
> +     } else if (cs->in.bo_list_handle) {
> +             r = amdgpu_bo_list_get(fpriv, cs->in.bo_list_handle,
> +                                    &p->bo_list);
> +             if (r)
> +                     return r;
> +     }
> +
>       if (p->bo_list) {
>               amdgpu_bo_list_get_list(p->bo_list, &p->validated);
>               if (p->bo_list->first_userptr != p->bo_list->num_entries)
> -- 
> 2.14.1
> 
> _______________________________________________
> amd-gfx mailing list
> [email protected]
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to