Message ID | 20220707102453.3633-5-christian.koenig@amd.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/6] drm/ttm: rename and cleanup ttm_bo_init_reserved | expand |
>-----Original Message----- >From: Intel-gfx <intel-gfx-bounces@lists.freedesktop.org> On Behalf Of >Christian König >Sent: Thursday, July 7, 2022 6:25 AM >To: intel-gfx@lists.freedesktop.org; dri-devel@lists.freedesktop.org; >nouveau@lists.freedesktop.org; amd-gfx@lists.freedesktop.org >Cc: Christian König <christian.koenig@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.koenig@amd.com> Reviewed-by: Michael J. Ruhl <michael.j.ruhl@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
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);
Allow BOs to exist without backing store. v2: handle ttm_bo_move_memcpy as well. Signed-off-by: Christian König <christian.koenig@amd.com> --- drivers/gpu/drm/ttm/ttm_bo.c | 16 ++++++++-------- drivers/gpu/drm/ttm/ttm_bo_util.c | 7 +++++-- 2 files changed, 13 insertions(+), 10 deletions(-)