>-----Original Message-----
>From: Intel-gfx <intel-gfx-boun...@lists.freedesktop.org> On Behalf Of
>Christian König
>Sent: Thursday, July 7, 2022 6:25 AM
>To: intel-...@lists.freedesktop.org; dri-devel@lists.freedesktop.org;
>nouv...@lists.freedesktop.org; amd-...@lists.freedesktop.org
>Cc: Christian König <christian.koe...@amd.com>
>Subject: [Intel-gfx] [PATCH 4/6] drm/ttm: audit bo->resource usage v2
>
>Allow BOs to exist without backing store.
>
>v2: handle ttm_bo_move_memcpy as well.
>
>Signed-off-by: Christian König <christian.koe...@amd.com>

Reviewed-by: Michael J. Ruhl <michael.j.r...@intel.com>

M

>---
> drivers/gpu/drm/ttm/ttm_bo.c      | 16 ++++++++--------
> drivers/gpu/drm/ttm/ttm_bo_util.c |  7 +++++--
> 2 files changed, 13 insertions(+), 10 deletions(-)
>
>diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
>index 984535d6a2d0..a2f49bdda8a1 100644
>--- a/drivers/gpu/drm/ttm/ttm_bo.c
>+++ b/drivers/gpu/drm/ttm/ttm_bo.c
>@@ -117,12 +117,13 @@ static int ttm_bo_handle_move_mem(struct
>ttm_buffer_object *bo,
>                                 struct ttm_operation_ctx *ctx,
>                                 struct ttm_place *hop)
> {
>-      struct ttm_resource_manager *old_man, *new_man;
>       struct ttm_device *bdev = bo->bdev;
>+      bool old_use_tt, new_use_tt;
>       int ret;
>
>-      old_man = ttm_manager_type(bdev, bo->resource->mem_type);
>-      new_man = ttm_manager_type(bdev, mem->mem_type);
>+      old_use_tt = bo->resource &&
>+              ttm_manager_type(bdev, bo->resource->mem_type)-
>>use_tt;
>+      new_use_tt = ttm_manager_type(bdev, mem->mem_type)->use_tt;
>
>       ttm_bo_unmap_virtual(bo);
>
>@@ -130,11 +131,11 @@ static int ttm_bo_handle_move_mem(struct
>ttm_buffer_object *bo,
>        * Create and bind a ttm if required.
>        */
>
>-      if (new_man->use_tt) {
>+      if (new_use_tt) {
>               /* Zero init the new TTM structure if the old location should
>                * have used one as well.
>                */
>-              ret = ttm_tt_create(bo, old_man->use_tt);
>+              ret = ttm_tt_create(bo, old_use_tt);
>               if (ret)
>                       goto out_err;
>
>@@ -160,8 +161,7 @@ static int ttm_bo_handle_move_mem(struct
>ttm_buffer_object *bo,
>       return 0;
>
> out_err:
>-      new_man = ttm_manager_type(bdev, bo->resource->mem_type);
>-      if (!new_man->use_tt)
>+      if (!old_use_tt)
>               ttm_bo_tt_destroy(bo);
>
>       return ret;
>@@ -904,7 +904,7 @@ int ttm_bo_validate(struct ttm_buffer_object *bo,
>       /*
>        * Check whether we need to move buffer.
>        */
>-      if (!ttm_resource_compat(bo->resource, placement)) {
>+      if (!bo->resource || !ttm_resource_compat(bo->resource,
>placement)) {
>               ret = ttm_bo_move_buffer(bo, placement, ctx);
>               if (ret)
>                       return ret;
>diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c
>b/drivers/gpu/drm/ttm/ttm_bo_util.c
>index 1cbfb00c1d65..1530982338e9 100644
>--- a/drivers/gpu/drm/ttm/ttm_bo_util.c
>+++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
>@@ -137,8 +137,7 @@ int ttm_bo_move_memcpy(struct ttm_buffer_object
>*bo,
>               ttm_manager_type(bo->bdev, dst_mem->mem_type);
>       struct ttm_tt *ttm = bo->ttm;
>       struct ttm_resource *src_mem = bo->resource;
>-      struct ttm_resource_manager *src_man =
>-              ttm_manager_type(bdev, src_mem->mem_type);
>+      struct ttm_resource_manager *src_man;
>       union {
>               struct ttm_kmap_iter_tt tt;
>               struct ttm_kmap_iter_linear_io io;
>@@ -147,6 +146,10 @@ int ttm_bo_move_memcpy(struct ttm_buffer_object
>*bo,
>       bool clear;
>       int ret = 0;
>
>+      if (!src_mem)
>+              return 0;
>+
>+      src_man = ttm_manager_type(bdev, src_mem->mem_type);
>       if (ttm && ((ttm->page_flags & TTM_TT_FLAG_SWAPPED) ||
>                   dst_man->use_tt)) {
>               ret = ttm_tt_populate(bdev, ttm, ctx);
>--
>2.25.1

Reply via email to