drm/amdgpu: Remove explicit wait after VM validate
[linux-2.6-microblaze.git] / drivers / gpu / drm / amd / amdgpu / amdgpu_amdkfd_gpuvm.c
index df0a059..e124d2d 100644 (file)
@@ -901,6 +901,26 @@ static int process_validate_vms(struct amdkfd_process_info *process_info)
        return 0;
 }
 
+static int process_sync_pds_resv(struct amdkfd_process_info *process_info,
+                                struct amdgpu_sync *sync)
+{
+       struct amdgpu_vm *peer_vm;
+       int ret;
+
+       list_for_each_entry(peer_vm, &process_info->vm_list_head,
+                           vm_list_node) {
+               struct amdgpu_bo *pd = peer_vm->root.base.bo;
+
+               ret = amdgpu_sync_resv(amdgpu_ttm_adev(pd->tbo.bdev),
+                                       sync, pd->tbo.resv,
+                                       AMDGPU_FENCE_OWNER_UNDEFINED, false);
+               if (ret)
+                       return ret;
+       }
+
+       return 0;
+}
+
 static int process_update_pds(struct amdkfd_process_info *process_info,
                              struct amdgpu_sync *sync)
 {
@@ -1199,7 +1219,8 @@ int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu(
        byte_align = (adev->family == AMDGPU_FAMILY_VI &&
                        adev->asic_type != CHIP_FIJI &&
                        adev->asic_type != CHIP_POLARIS10 &&
-                       adev->asic_type != CHIP_POLARIS11) ?
+                       adev->asic_type != CHIP_POLARIS11 &&
+                       adev->asic_type != CHIP_POLARIS12) ?
                        VI_BO_SIZE_ALIGN : 1;
 
        mapping_flags = AMDGPU_VM_PAGE_READABLE;
@@ -2044,13 +2065,10 @@ int amdgpu_amdkfd_gpuvm_restore_process_bos(void *info, struct dma_fence **ef)
        if (ret)
                goto validate_map_fail;
 
-       /* Wait for PD/PTs validate to finish */
-       /* FIXME: I think this isn't needed */
-       list_for_each_entry(peer_vm, &process_info->vm_list_head,
-                           vm_list_node) {
-               struct amdgpu_bo *bo = peer_vm->root.base.bo;
-
-               ttm_bo_wait(&bo->tbo, false, false);
+       ret = process_sync_pds_resv(process_info, &sync_obj);
+       if (ret) {
+               pr_debug("Memory eviction: Failed to sync to PD BO moving fence. Try again\n");
+               goto validate_map_fail;
        }
 
        /* Validate BOs and map them to GPUVM (update VM page tables). */