OSDN Git Service

drm/amdgpu: drop the busy wait for GMC v9 TLB invalidations
authorChristian König <christian.koenig@amd.com>
Thu, 25 Oct 2018 08:50:42 +0000 (10:50 +0200)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 5 Nov 2018 20:49:40 +0000 (15:49 -0500)
This code is not performance critical.

Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Emily Deng <Emily.Deng@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c

index 4845b6a..14ca4d8 100644 (file)
@@ -350,35 +350,17 @@ static void gmc_v9_0_flush_gpu_tlb(struct amdgpu_device *adev,
                }
 
                spin_lock(&adev->gmc.invalidate_lock);
-
                WREG32_NO_KIQ(hub->vm_inv_eng0_req + eng, tmp);
-
-               /* Busy wait for ACK.*/
-               for (j = 0; j < 100; j++) {
-                       tmp = RREG32_NO_KIQ(hub->vm_inv_eng0_ack + eng);
-                       tmp &= 1 << vmid;
-                       if (tmp)
-                               break;
-                       cpu_relax();
-               }
-               if (j < 100) {
-                       spin_unlock(&adev->gmc.invalidate_lock);
-                       continue;
-               }
-
-               /* Wait for ACK with a delay.*/
                for (j = 0; j < adev->usec_timeout; j++) {
                        tmp = RREG32_NO_KIQ(hub->vm_inv_eng0_ack + eng);
-                       tmp &= 1 << vmid;
-                       if (tmp)
+                       if (tmp & (1 << vmid))
                                break;
                        udelay(1);
                }
-               if (j < adev->usec_timeout) {
-                       spin_unlock(&adev->gmc.invalidate_lock);
-                       continue;
-               }
                spin_unlock(&adev->gmc.invalidate_lock);
+               if (j < adev->usec_timeout)
+                       continue;
+
                DRM_ERROR("Timeout waiting for VM flush ACK!\n");
        }
 }