aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
diff options
context:
space:
mode:
authorJunwei Zhang <Jerry.Zhang@amd.com>2015-10-09 20:48:42 -0400
committerAlex Deucher <alexander.deucher@amd.com>2015-10-14 16:16:42 -0400
commit2440ff2c9151120c8ae27de6565b11831ee07e08 (patch)
tree2e36ced49bf5a0441ac7ba4c4d573c0c065bc358 /drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
parentd6c10f6b81e340e7d2d337183517a6da739d5ba2 (diff)
drm/amdgpu: add timer to fence to detect scheduler lockup
Change-Id: I67e987db0efdca28faa80b332b75571192130d33 Signed-off-by: Junwei Zhang <Jerry.Zhang@amd.com> Reviewed-by: David Zhou <david1.zhou@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
index b3fc26c59787..fcad7e060938 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
@@ -628,8 +628,20 @@ int amdgpu_fence_driver_init_ring(struct amdgpu_ring *ring)
628 init_waitqueue_head(&ring->fence_drv.fence_queue); 628 init_waitqueue_head(&ring->fence_drv.fence_queue);
629 629
630 if (amdgpu_enable_scheduler) { 630 if (amdgpu_enable_scheduler) {
631 long timeout = msecs_to_jiffies(amdgpu_lockup_timeout);
632 if (timeout == 0) {
633 /*
634 * FIXME:
635 * Delayed workqueue cannot use it directly,
636 * so the scheduler will not use delayed workqueue if
637 * MAX_SCHEDULE_TIMEOUT is set.
638 * Currently keep it simple and silly.
639 */
640 timeout = MAX_SCHEDULE_TIMEOUT;
641 }
631 r = amd_sched_init(&ring->sched, &amdgpu_sched_ops, 642 r = amd_sched_init(&ring->sched, &amdgpu_sched_ops,
632 amdgpu_sched_hw_submission, ring->name); 643 amdgpu_sched_hw_submission,
644 timeout, ring->name);
633 if (r) { 645 if (r) {
634 DRM_ERROR("Failed to create scheduler on ring %s.\n", 646 DRM_ERROR("Failed to create scheduler on ring %s.\n",
635 ring->name); 647 ring->name);