[PATCH] drm/ttm: fix incorrect TT->SYSTEM move handling

Dave Airlie airlied at gmail.com
Wed Sep 16 19:27:33 UTC 2020


On Thu, 17 Sep 2020 at 00:24, Christian König
<ckoenig.leichtzumerken at gmail.com> wrote:
>
> When we move from the SYSTEM domain to the TT domain
> we still need to potentially change the caching state.
>
> This is most likely the source of a bunch of problems with
> AGP and USWC together with hibernation and swap.

I'm going to need more commentary, because I've been staring at this
code a lot in the past few days and I'm although I dislike this path,
I'm not sure what this brings.

The current code flow to me is for SYSTEM->TT domain

ttm_tt_create
ttm_tt_set_placement_caching (new placement)
ttm_tt_bind (can cause populate)
move_notify
replace pointers
evicted = false
return

The new flow looks like
ttm_tt_create
ttm_tt_set_placement_caching (new placement)
ttm_tt_bind (can cause populate)
move_notify
(via ttm_bo_move_ttm)
ttm_tt_set_placement_caching (new placement)
ttm_tt_bind
replace pointers
(back to main code)
evicted = false
return

Is the second set placement caching doing something different here? or
is there something that happens in move notify that we need to set
things afterwards?

Dave.

>
> Signed-off-by: Christian König <christian.koenig at amd.com>
> CC: stable at vger.kernel.org
> ---
>  drivers/gpu/drm/ttm/ttm_bo.c | 8 --------
>  1 file changed, 8 deletions(-)
>
> diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
> index ffbdc20d8e8d..5f7efc90970e 100644
> --- a/drivers/gpu/drm/ttm/ttm_bo.c
> +++ b/drivers/gpu/drm/ttm/ttm_bo.c
> @@ -264,13 +264,6 @@ static int ttm_bo_handle_move_mem(struct ttm_buffer_object *bo,
>                         if (ret)
>                                 goto out_err;
>                 }
> -
> -               if (bo->mem.mem_type == TTM_PL_SYSTEM) {
> -                       if (bdev->driver->move_notify)
> -                               bdev->driver->move_notify(bo, evict, mem);
> -                       bo->mem = *mem;
> -                       goto moved;
> -               }
>         }
>
>         if (bdev->driver->move_notify)
> @@ -293,7 +286,6 @@ static int ttm_bo_handle_move_mem(struct ttm_buffer_object *bo,
>                 goto out_err;
>         }
>
> -moved:
>         bo->evicted = false;
>
>         ctx->bytes_moved += bo->num_pages << PAGE_SHIFT;
> --
> 2.17.1
>


More information about the dri-devel mailing list