diff options
author | Christian König <christian.koenig@amd.com> | 2015-09-08 14:22:31 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2015-09-23 17:23:39 -0400 |
commit | 4f839a243d3b0d8b1a14f4778a87ec4d8ddbf15f (patch) | |
tree | 856d9a22af55ae4e8347c14c3d60cd235e79da72 /drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c | |
parent | 5ec92a7692872d656cffe010920fb49c4f51d75f (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.c | 23 |
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 | */ |
612 | void amdgpu_fence_driver_init_ring(struct amdgpu_ring *ring) | 612 | int 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); |