drm/amdgpu: KFD Restore process: Optimize waiting
authorHarish Kasiviswanathan <Harish.Kasiviswanathan@amd.com>
Wed, 28 Feb 2018 16:50:10 +0000 (11:50 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 20 Nov 2018 19:00:58 +0000 (14:00 -0500)
Instead of waiting for each KFD BO after validation just wait for the
last BO moving fence.

Signed-off-by: Harish Kasiviswanathan <Harish.Kasiviswanathan@amd.com>
Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c

index e124d2d88257c6cbc3211e5dbe72fffd02e5e60a..d00537148b4e9c525eee4ef1c4a22d2dbd996039 100644 (file)
@@ -2084,7 +2084,12 @@ int amdgpu_amdkfd_gpuvm_restore_process_bos(void *info, struct dma_fence **ef)
                        pr_debug("Memory eviction: Validate BOs failed. Try again\n");
                        goto validate_map_fail;
                }
-
+               ret = amdgpu_sync_fence(amdgpu_ttm_adev(bo->tbo.bdev),
+                                       &sync_obj, bo->tbo.moving, false);
+               if (ret) {
+                       pr_debug("Memory eviction: Sync BO fence failed. Try again\n");
+                       goto validate_map_fail;
+               }
                list_for_each_entry(bo_va_entry, &mem->bo_va_list,
                                    bo_list) {
                        ret = update_gpuvm_pte((struct amdgpu_device *)
@@ -2105,6 +2110,7 @@ int amdgpu_amdkfd_gpuvm_restore_process_bos(void *info, struct dma_fence **ef)
                goto validate_map_fail;
        }
 
+       /* Wait for validate and PT updates to finish */
        amdgpu_sync_wait(&sync_obj, false);
 
        /* Release old eviction fence and create new one, because fence only
@@ -2123,10 +2129,7 @@ int amdgpu_amdkfd_gpuvm_restore_process_bos(void *info, struct dma_fence **ef)
        process_info->eviction_fence = new_fence;
        *ef = dma_fence_get(&new_fence->base);
 
-       /* Wait for validate to finish and attach new eviction fence */
-       list_for_each_entry(mem, &process_info->kfd_bo_list,
-               validate_list.head)
-               ttm_bo_wait(&mem->bo->tbo, false, false);
+       /* Attach new eviction fence to all BOs */
        list_for_each_entry(mem, &process_info->kfd_bo_list,
                validate_list.head)
                amdgpu_bo_fence(mem->bo,