drm/amdkfd: Handle drain retry fault race with XNACK mode change
authorPhilip Yang <Philip.Yang@amd.com>
Wed, 6 Apr 2022 02:24:42 +0000 (22:24 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 11 Apr 2022 17:50:35 +0000 (13:50 -0400)
Application could change XNACK enabled to disabled while KFD is draining
stale retry fault, therefore the check for whether to drain retry faults
must be before the check for whether xnack_enabled, to avoid report
incorrect vm fault after application changes XNACK mode.

Signed-off-by: Philip Yang <Philip.Yang@amd.com>
Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdkfd/kfd_svm.c

index d3fb2d0b5a25031ca3a756576759a5d6e2661216..8b6adc142e2518e52412ae393bd86d757ebef159 100644 (file)
@@ -2685,11 +2685,6 @@ svm_range_restore_pages(struct amdgpu_device *adev, unsigned int pasid,
                pr_debug("kfd process not founded pasid 0x%x\n", pasid);
                return 0;
        }
-       if (!p->xnack_enabled) {
-               pr_debug("XNACK not enabled for pasid 0x%x\n", pasid);
-               r = -EFAULT;
-               goto out;
-       }
        svms = &p->svms;
 
        pr_debug("restoring svms 0x%p fault address 0x%llx\n", svms, addr);
@@ -2700,6 +2695,12 @@ svm_range_restore_pages(struct amdgpu_device *adev, unsigned int pasid,
                goto out;
        }
 
+       if (!p->xnack_enabled) {
+               pr_debug("XNACK not enabled for pasid 0x%x\n", pasid);
+               r = -EFAULT;
+               goto out;
+       }
+
        /* p->lead_thread is available as kfd_process_wq_release flush the work
         * before releasing task ref.
         */