[PATCH] drm/amdgpu: Mark amdgpu_bo as invalid after moved

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



It leads to race condition if amdgpu_bo is marked as invalid
before it is really moved.

Signed-off-by: YuanShang <YuanShang.Mao@xxxxxxx>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index 29e4b5875872..a29d5132ad3d 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -519,8 +519,8 @@ static int amdgpu_bo_move(struct ttm_buffer_object *bo, bool evict,
 
 	if (!old_mem || (old_mem->mem_type == TTM_PL_SYSTEM &&
 			 bo->ttm == NULL)) {
-		amdgpu_bo_move_notify(bo, evict, new_mem);
 		ttm_bo_move_null(bo, new_mem);
+		amdgpu_bo_move_notify(bo, evict, new_mem);
 		return 0;
 	}
 	if (old_mem->mem_type == AMDGPU_GEM_DOMAIN_DGMA ||
@@ -530,8 +530,8 @@ static int amdgpu_bo_move(struct ttm_buffer_object *bo, bool evict,
 	if (old_mem->mem_type == TTM_PL_SYSTEM &&
 	    (new_mem->mem_type == TTM_PL_TT ||
 	     new_mem->mem_type == AMDGPU_PL_PREEMPT)) {
-		amdgpu_bo_move_notify(bo, evict, new_mem);
 		ttm_bo_move_null(bo, new_mem);
+		amdgpu_bo_move_notify(bo, evict, new_mem);
 		return 0;
 	}
 	if ((old_mem->mem_type == TTM_PL_TT ||
@@ -542,9 +542,9 @@ static int amdgpu_bo_move(struct ttm_buffer_object *bo, bool evict,
 			return r;
 
 		amdgpu_ttm_backend_unbind(bo->bdev, bo->ttm);
-		amdgpu_bo_move_notify(bo, evict, new_mem);
 		ttm_resource_free(bo, &bo->resource);
 		ttm_bo_assign_mem(bo, new_mem);
+		amdgpu_bo_move_notify(bo, evict, new_mem);
 		return 0;
 	}
 
@@ -557,8 +557,8 @@ static int amdgpu_bo_move(struct ttm_buffer_object *bo, bool evict,
 	    new_mem->mem_type == AMDGPU_PL_OA ||
 	    new_mem->mem_type == AMDGPU_PL_DOORBELL) {
 		/* Nothing to save here */
-		amdgpu_bo_move_notify(bo, evict, new_mem);
 		ttm_bo_move_null(bo, new_mem);
+		amdgpu_bo_move_notify(bo, evict, new_mem);
 		return 0;
 	}
 
@@ -583,11 +583,11 @@ static int amdgpu_bo_move(struct ttm_buffer_object *bo, bool evict,
 		return -EMULTIHOP;
 	}
 
-	amdgpu_bo_move_notify(bo, evict, new_mem);
 	if (adev->mman.buffer_funcs_enabled)
 		r = amdgpu_move_blit(bo, evict, new_mem, old_mem);
 	else
 		r = -ENODEV;
+	amdgpu_bo_move_notify(bo, evict, new_mem);
 
 	if (r) {
 		/* Check that all memory is CPU accessible */
-- 
2.25.1




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux