aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
diff options
context:
space:
mode:
authorChristian König <christian.koenig@amd.com>2015-09-08 14:22:31 -0400
committerAlex Deucher <alexander.deucher@amd.com>2015-09-23 17:23:39 -0400
commit4f839a243d3b0d8b1a14f4778a87ec4d8ddbf15f (patch)
tree856d9a22af55ae4e8347c14c3d60cd235e79da72 /drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
parent5ec92a7692872d656cffe010920fb49c4f51d75f (diff)
drm/amdgpu: more scheduler cleanups v2
Embed the scheduler into the ring structure instead of allocating it. Use the ring name directly instead of the id. v2: rebased, whitespace cleanup Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Junwei Zhang <Jerry.Zhang@amd.com> Reviewed-by: Chunming Zhou<david1.zhou@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c23
1 files changed, 12 insertions, 11 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
index 7f2d85e7e77a..b3fc26c59787 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
@@ -609,9 +609,9 @@ int amdgpu_fence_driver_start_ring(struct amdgpu_ring *ring,
609 * Init the fence driver for the requested ring (all asics). 609 * Init the fence driver for the requested ring (all asics).
610 * Helper function for amdgpu_fence_driver_init(). 610 * Helper function for amdgpu_fence_driver_init().
611 */ 611 */
612void amdgpu_fence_driver_init_ring(struct amdgpu_ring *ring) 612int amdgpu_fence_driver_init_ring(struct amdgpu_ring *ring)
613{ 613{
614 int i; 614 int i, r;
615 615
616 ring->fence_drv.cpu_addr = NULL; 616 ring->fence_drv.cpu_addr = NULL;
617 ring->fence_drv.gpu_addr = 0; 617 ring->fence_drv.gpu_addr = 0;
@@ -628,14 +628,16 @@ void 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 ring->sched = amd_sched_create(&amdgpu_sched_ops, 631 r = amd_sched_init(&ring->sched, &amdgpu_sched_ops,
632 ring->idx, 632 amdgpu_sched_hw_submission, ring->name);
633 amdgpu_sched_hw_submission, 633 if (r) {
634 (void *)ring->adev); 634 DRM_ERROR("Failed to create scheduler on ring %s.\n",
635 if (!ring->sched) 635 ring->name);
636 DRM_ERROR("Failed to create scheduler on ring %d.\n", 636 return r;
637 ring->idx); 637 }
638 } 638 }
639
640 return 0;
639} 641}
640 642
641/** 643/**
@@ -683,8 +685,7 @@ void amdgpu_fence_driver_fini(struct amdgpu_device *adev)
683 wake_up_all(&ring->fence_drv.fence_queue); 685 wake_up_all(&ring->fence_drv.fence_queue);
684 amdgpu_irq_put(adev, ring->fence_drv.irq_src, 686 amdgpu_irq_put(adev, ring->fence_drv.irq_src,
685 ring->fence_drv.irq_type); 687 ring->fence_drv.irq_type);
686 if (ring->sched) 688 amd_sched_fini(&ring->sched);
687 amd_sched_destroy(ring->sched);
688 ring->fence_drv.initialized = false; 689 ring->fence_drv.initialized = false;
689 } 690 }
690 mutex_unlock(&adev->ring_lock); 691 mutex_unlock(&adev->ring_lock);