Merge tag 'staging-5.11-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh...
[linux-2.6-microblaze.git] / drivers / gpu / drm / amd / amdgpu / amdgpu_amdkfd_gpuvm.c
index 703cd5a..7791d07 100644 (file)
@@ -995,7 +995,7 @@ create_evict_fence_fail:
        return ret;
 }
 
-int amdgpu_amdkfd_gpuvm_create_process_vm(struct kgd_dev *kgd, unsigned int pasid,
+int amdgpu_amdkfd_gpuvm_create_process_vm(struct kgd_dev *kgd, u32 pasid,
                                          void **vm, void **process_info,
                                          struct dma_fence **ef)
 {
@@ -1031,7 +1031,7 @@ amdgpu_vm_init_fail:
 }
 
 int amdgpu_amdkfd_gpuvm_acquire_process_vm(struct kgd_dev *kgd,
-                                          struct file *filp, unsigned int pasid,
+                                          struct file *filp, u32 pasid,
                                           void **vm, void **process_info,
                                           struct dma_fence **ef)
 {
@@ -1478,7 +1478,7 @@ int amdgpu_amdkfd_gpuvm_map_memory_to_gpu(
                }
        }
 
-       if (!amdgpu_ttm_tt_get_usermm(bo->tbo.ttm) && !bo->pin_count)
+       if (!amdgpu_ttm_tt_get_usermm(bo->tbo.ttm) && !bo->tbo.pin_count)
                amdgpu_bo_fence(bo,
                                &avm->process_info->eviction_fence->base,
                                true);
@@ -1557,7 +1557,8 @@ int amdgpu_amdkfd_gpuvm_unmap_memory_from_gpu(
         * required.
         */
        if (mem->mapped_to_gpu_memory == 0 &&
-           !amdgpu_ttm_tt_get_usermm(mem->bo->tbo.ttm) && !mem->bo->pin_count)
+           !amdgpu_ttm_tt_get_usermm(mem->bo->tbo.ttm) &&
+           !mem->bo->tbo.pin_count)
                amdgpu_amdkfd_remove_eviction_fence(mem->bo,
                                                process_info->eviction_fence);
 
@@ -2042,6 +2043,8 @@ int amdgpu_amdkfd_gpuvm_restore_process_bos(void *info, struct dma_fence **ef)
        int ret = 0, i;
        struct list_head duplicate_save;
        struct amdgpu_sync sync_obj;
+       unsigned long failed_size = 0;
+       unsigned long total_size = 0;
 
        INIT_LIST_HEAD(&duplicate_save);
        INIT_LIST_HEAD(&ctx.list);
@@ -2098,10 +2101,18 @@ int amdgpu_amdkfd_gpuvm_restore_process_bos(void *info, struct dma_fence **ef)
                uint32_t domain = mem->domain;
                struct kfd_bo_va_list *bo_va_entry;
 
+               total_size += amdgpu_bo_size(bo);
+
                ret = amdgpu_amdkfd_bo_validate(bo, domain, false);
                if (ret) {
-                       pr_debug("Memory eviction: Validate BOs failed. Try again\n");
-                       goto validate_map_fail;
+                       pr_debug("Memory eviction: Validate BOs failed\n");
+                       failed_size += amdgpu_bo_size(bo);
+                       ret = amdgpu_amdkfd_bo_validate(bo,
+                                               AMDGPU_GEM_DOMAIN_GTT, false);
+                       if (ret) {
+                               pr_debug("Memory eviction: Try again\n");
+                               goto validate_map_fail;
+                       }
                }
                ret = amdgpu_sync_fence(&sync_obj, bo->tbo.moving);
                if (ret) {
@@ -2121,6 +2132,9 @@ int amdgpu_amdkfd_gpuvm_restore_process_bos(void *info, struct dma_fence **ef)
                }
        }
 
+       if (failed_size)
+               pr_debug("0x%lx/0x%lx in system\n", failed_size, total_size);
+
        /* Update page directories */
        ret = process_update_pds(process_info, &sync_obj);
        if (ret) {