[PATCH] drm/amdgpu: user pages array memory leak fix

Joe Barnett thejoe at gmail.com
Thu Oct 3 22:45:42 UTC 2019


I've tested applying v2 of this patch against a v5.3 tagged kernel and it
appears to fix the issue I reported.

Thanks,
-Joe

On Thu, Oct 3, 2019 at 12:07 PM Yang, Philip <Philip.Yang at amd.com> wrote:

> user_pages array should be freed regardless if user pages are
> invalidated after bo is created because HMM change to always allocate
> user pages array to get user pages while parsing user page bo.
>
> Don't need to to get user pages while creating bo because user pages
> will only be used after parsing user page bo.
>
> Bugzilla: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1844962
>
> Signed-off-by: Philip Yang <Philip.Yang at amd.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c  |  2 +-
>  drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 23 +----------------------
>  2 files changed, 2 insertions(+), 23 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> index 49b767b7238f..e861de259def 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> @@ -498,7 +498,7 @@ static int amdgpu_cs_list_validate(struct
> amdgpu_cs_parser *p,
>                 if (r)
>                         return r;
>
> -               if (binding_userptr) {
> +               if (lobj->user_pages) {
>                         kvfree(lobj->user_pages);
>                         lobj->user_pages = NULL;
>                 }
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> index a828e3d0bfbd..3ccd61d69964 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> @@ -283,7 +283,6 @@ int amdgpu_gem_create_ioctl(struct drm_device *dev,
> void *data,
>  int amdgpu_gem_userptr_ioctl(struct drm_device *dev, void *data,
>                              struct drm_file *filp)
>  {
> -       struct ttm_operation_ctx ctx = { true, false };
>         struct amdgpu_device *adev = dev->dev_private;
>         struct drm_amdgpu_gem_userptr *args = data;
>         struct drm_gem_object *gobj;
> @@ -326,32 +325,12 @@ int amdgpu_gem_userptr_ioctl(struct drm_device *dev,
> void *data,
>                         goto release_object;
>         }
>
> -       if (args->flags & AMDGPU_GEM_USERPTR_VALIDATE) {
> -               r = amdgpu_ttm_tt_get_user_pages(bo, bo->tbo.ttm->pages);
> -               if (r)
> -                       goto release_object;
> -
> -               r = amdgpu_bo_reserve(bo, true);
> -               if (r)
> -                       goto user_pages_done;
> -
> -               amdgpu_bo_placement_from_domain(bo, AMDGPU_GEM_DOMAIN_GTT);
> -               r = ttm_bo_validate(&bo->tbo, &bo->placement, &ctx);
> -               amdgpu_bo_unreserve(bo);
> -               if (r)
> -                       goto user_pages_done;
> -       }
> -
>         r = drm_gem_handle_create(filp, gobj, &handle);
>         if (r)
> -               goto user_pages_done;
> +               goto release_object;
>
>         args->handle = handle;
>
> -user_pages_done:
> -       if (args->flags & AMDGPU_GEM_USERPTR_VALIDATE)
> -               amdgpu_ttm_tt_get_user_pages_done(bo->tbo.ttm);
> -
>  release_object:
>         drm_gem_object_put_unlocked(gobj);
>
> --
> 2.17.1
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/amd-gfx/attachments/20191003/6de4100c/attachment-0001.html>


More information about the amd-gfx mailing list