drm/amdgpu: fix no sync_wait in copy_buffer
authorChunming Zhou <david1.zhou@amd.com>
Tue, 25 Aug 2015 07:12:26 +0000 (15:12 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 25 Aug 2015 14:53:48 +0000 (10:53 -0400)
when eviction is happening, if don't handle
dependency, then the fence could be dead off.

Signed-off-by: Chunming Zhou <david1.zhou@amd.com>
Reviewed-by: Jammy Zhou <Jammy.Zhou@amd.com>
Reviewed-by: Christian K?nig <christian.koenig@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c

index d7c02e1..4cb8132 100644 (file)
@@ -1014,13 +1014,19 @@ int amdgpu_copy_buffer(struct amdgpu_ring *ring,
        /* for fence and sync */
        num_dw += 64 + AMDGPU_NUM_SYNCS * 8;
 
+       r = amdgpu_sync_wait(&sync);
+       if (r) {
+               DRM_ERROR("sync wait failed (%d).\n", r);
+               amdgpu_sync_free(adev, &sync, NULL);
+               return r;
+       }
+
        r = amdgpu_ring_lock(ring, num_dw);
        if (r) {
                DRM_ERROR("ring lock failed (%d).\n", r);
                amdgpu_sync_free(adev, &sync, NULL);
                return r;
        }
-
        amdgpu_sync_rings(&sync, ring);
 
        for (i = 0; i < num_loops; i++) {