diff options
Diffstat (limited to 'common/recipes-kernel/linux/files/0418-drm-amdgpu-use-kernel-fence-in-amdgpu_test.patch')
-rw-r--r-- | common/recipes-kernel/linux/files/0418-drm-amdgpu-use-kernel-fence-in-amdgpu_test.patch | 195 |
1 files changed, 195 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0418-drm-amdgpu-use-kernel-fence-in-amdgpu_test.patch b/common/recipes-kernel/linux/files/0418-drm-amdgpu-use-kernel-fence-in-amdgpu_test.patch new file mode 100644 index 00000000..dda5560a --- /dev/null +++ b/common/recipes-kernel/linux/files/0418-drm-amdgpu-use-kernel-fence-in-amdgpu_test.patch @@ -0,0 +1,195 @@ +From 6863bc8bb3750049d1b63574ef29cbf94d52eb47 Mon Sep 17 00:00:00 2001 +From: Chunming Zhou <david1.zhou@amd.com> +Date: Mon, 3 Aug 2015 16:19:29 +0800 +Subject: [PATCH 0418/1050] drm/amdgpu: use kernel fence in amdgpu_test + +Signed-off-by: Chunming Zhou <david1.zhou@amd.com> +Reviewed-by: Christian K?nig <christian.koenig@amd.com> +Reviewed-by: Jammy Zhou <jammy.zhou@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_test.c | 46 +++++++++++++++----------------- + 1 file changed, 22 insertions(+), 24 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_test.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_test.c +index 251b1eb..afb57de 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_test.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_test.c +@@ -238,49 +238,47 @@ void amdgpu_test_moves(struct amdgpu_device *adev) + + static int amdgpu_test_create_and_emit_fence(struct amdgpu_device *adev, + struct amdgpu_ring *ring, +- struct amdgpu_fence **fence) ++ struct fence **fence) + { + uint32_t handle = ring->idx ^ 0xdeafbeef; + int r; + + if (ring == &adev->uvd.ring) { +- struct fence *f = NULL; + r = amdgpu_uvd_get_create_msg(ring, handle, NULL); + if (r) { + DRM_ERROR("Failed to get dummy create msg\n"); + return r; + } + +- r = amdgpu_uvd_get_destroy_msg(ring, handle, &f); ++ r = amdgpu_uvd_get_destroy_msg(ring, handle, fence); + if (r) { + DRM_ERROR("Failed to get dummy destroy msg\n"); + return r; + } +- *fence = to_amdgpu_fence(f); + + } else if (ring == &adev->vce.ring[0] || + ring == &adev->vce.ring[1]) { +- struct fence *f = NULL; + r = amdgpu_vce_get_create_msg(ring, handle, NULL); + if (r) { + DRM_ERROR("Failed to get dummy create msg\n"); + return r; + } + +- r = amdgpu_vce_get_destroy_msg(ring, handle, &f); ++ r = amdgpu_vce_get_destroy_msg(ring, handle, fence); + if (r) { + DRM_ERROR("Failed to get dummy destroy msg\n"); + return r; + } +- *fence = to_amdgpu_fence(f); + } else { ++ struct amdgpu_fence *a_fence = NULL; + r = amdgpu_ring_lock(ring, 64); + if (r) { + DRM_ERROR("Failed to lock ring A %d\n", ring->idx); + return r; + } +- amdgpu_fence_emit(ring, AMDGPU_FENCE_OWNER_UNDEFINED, fence); ++ amdgpu_fence_emit(ring, AMDGPU_FENCE_OWNER_UNDEFINED, &a_fence); + amdgpu_ring_unlock_commit(ring); ++ *fence = &a_fence->base; + } + return 0; + } +@@ -289,7 +287,7 @@ void amdgpu_test_ring_sync(struct amdgpu_device *adev, + struct amdgpu_ring *ringA, + struct amdgpu_ring *ringB) + { +- struct amdgpu_fence *fence1 = NULL, *fence2 = NULL; ++ struct fence *fence1 = NULL, *fence2 = NULL; + struct amdgpu_semaphore *semaphore = NULL; + int r; + +@@ -325,7 +323,7 @@ void amdgpu_test_ring_sync(struct amdgpu_device *adev, + + mdelay(1000); + +- if (amdgpu_fence_signaled(fence1)) { ++ if (fence_is_signaled(fence1)) { + DRM_ERROR("Fence 1 signaled without waiting for semaphore.\n"); + goto out_cleanup; + } +@@ -338,7 +336,7 @@ void amdgpu_test_ring_sync(struct amdgpu_device *adev, + amdgpu_semaphore_emit_signal(ringB, semaphore); + amdgpu_ring_unlock_commit(ringB); + +- r = amdgpu_fence_wait(fence1, false); ++ r = fence_wait(fence1, false); + if (r) { + DRM_ERROR("Failed to wait for sync fence 1\n"); + goto out_cleanup; +@@ -346,7 +344,7 @@ void amdgpu_test_ring_sync(struct amdgpu_device *adev, + + mdelay(1000); + +- if (amdgpu_fence_signaled(fence2)) { ++ if (fence_is_signaled(fence2)) { + DRM_ERROR("Fence 2 signaled without waiting for semaphore.\n"); + goto out_cleanup; + } +@@ -359,7 +357,7 @@ void amdgpu_test_ring_sync(struct amdgpu_device *adev, + amdgpu_semaphore_emit_signal(ringB, semaphore); + amdgpu_ring_unlock_commit(ringB); + +- r = amdgpu_fence_wait(fence2, false); ++ r = fence_wait(fence2, false); + if (r) { + DRM_ERROR("Failed to wait for sync fence 1\n"); + goto out_cleanup; +@@ -369,10 +367,10 @@ out_cleanup: + amdgpu_semaphore_free(adev, &semaphore, NULL); + + if (fence1) +- amdgpu_fence_unref(&fence1); ++ fence_put(fence1); + + if (fence2) +- amdgpu_fence_unref(&fence2); ++ fence_put(fence2); + + if (r) + printk(KERN_WARNING "Error while testing ring sync (%d).\n", r); +@@ -383,7 +381,7 @@ static void amdgpu_test_ring_sync2(struct amdgpu_device *adev, + struct amdgpu_ring *ringB, + struct amdgpu_ring *ringC) + { +- struct amdgpu_fence *fenceA = NULL, *fenceB = NULL; ++ struct fence *fenceA = NULL, *fenceB = NULL; + struct amdgpu_semaphore *semaphore = NULL; + bool sigA, sigB; + int i, r; +@@ -419,11 +417,11 @@ static void amdgpu_test_ring_sync2(struct amdgpu_device *adev, + + mdelay(1000); + +- if (amdgpu_fence_signaled(fenceA)) { ++ if (fence_is_signaled(fenceA)) { + DRM_ERROR("Fence A signaled without waiting for semaphore.\n"); + goto out_cleanup; + } +- if (amdgpu_fence_signaled(fenceB)) { ++ if (fence_is_signaled(fenceB)) { + DRM_ERROR("Fence B signaled without waiting for semaphore.\n"); + goto out_cleanup; + } +@@ -438,8 +436,8 @@ static void amdgpu_test_ring_sync2(struct amdgpu_device *adev, + + for (i = 0; i < 30; ++i) { + mdelay(100); +- sigA = amdgpu_fence_signaled(fenceA); +- sigB = amdgpu_fence_signaled(fenceB); ++ sigA = fence_is_signaled(fenceA); ++ sigB = fence_is_signaled(fenceB); + if (sigA || sigB) + break; + } +@@ -464,12 +462,12 @@ static void amdgpu_test_ring_sync2(struct amdgpu_device *adev, + + mdelay(1000); + +- r = amdgpu_fence_wait(fenceA, false); ++ r = fence_wait(fenceA, false); + if (r) { + DRM_ERROR("Failed to wait for sync fence A\n"); + goto out_cleanup; + } +- r = amdgpu_fence_wait(fenceB, false); ++ r = fence_wait(fenceB, false); + if (r) { + DRM_ERROR("Failed to wait for sync fence B\n"); + goto out_cleanup; +@@ -479,10 +477,10 @@ out_cleanup: + amdgpu_semaphore_free(adev, &semaphore, NULL); + + if (fenceA) +- amdgpu_fence_unref(&fenceA); ++ fence_put(fenceA); + + if (fenceB) +- amdgpu_fence_unref(&fenceB); ++ fence_put(fenceB); + + if (r) + printk(KERN_WARNING "Error while testing ring sync (%d).\n", r); +-- +1.9.1 + |