drm/kfd: Correct pinned buffer handling at kfd restore and validate process
authorXiaogang Chen <xiaogang.chen@amd.com>
Tue, 14 May 2024 04:54:25 +0000 (23:54 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 17 May 2024 21:40:36 +0000 (17:40 -0400)
This reverts commit 8a774fe912ff ("drm/amdgpu: avoid restore process run into dead loop")
since buffer got pinned is not related whether it needs mapping
And skip buffer validation at kfd driver if the buffer has been pinned.

Signed-off-by: Xiaogang Chen <Xiaogang.Chen@amd.com>
Reviewed-by: Felix Kuehling <felix.kuehling@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c

index 3314821e4cf3951833039adcbdbf54eec43eb33a..336eb51c483972b6efbbccfc24cede424da020f7 100644 (file)
@@ -415,6 +415,10 @@ static int amdgpu_amdkfd_bo_validate(struct amdgpu_bo *bo, uint32_t domain,
                 "Called with userptr BO"))
                return -EINVAL;
 
+       /* bo has been pinned, not need validate it */
+       if (bo->tbo.pin_count)
+               return 0;
+
        amdgpu_bo_placement_from_domain(bo, domain);
 
        ret = ttm_bo_validate(&bo->tbo, &bo->placement, &ctx);
@@ -2736,7 +2740,7 @@ static int confirm_valid_user_pages_locked(struct amdkfd_process_info *process_i
 
                /* keep mem without hmm range at userptr_inval_list */
                if (!mem->range)
-                        continue;
+                       continue;
 
                /* Only check mem with hmm range associated */
                valid = amdgpu_ttm_tt_get_user_pages_done(
@@ -2981,9 +2985,6 @@ int amdgpu_amdkfd_gpuvm_restore_process_bos(void *info, struct dma_fence __rcu *
                        if (!attachment->is_mapped)
                                continue;
 
-                       if (attachment->bo_va->base.bo->tbo.pin_count)
-                               continue;
-
                        kfd_mem_dmaunmap_attachment(mem, attachment);
                        ret = update_gpuvm_pte(mem, attachment, &sync_obj);
                        if (ret) {