diff options
author | Christian König <christian.koenig@amd.com> | 2016-02-01 06:20:25 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2016-02-10 14:17:22 -0500 |
commit | d71518b5aa7c9c298ffbd12ddd23297e3373a37b (patch) | |
tree | bb548c89c8f21770cdf7086fee8c1c92aea1fa64 /drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | |
parent | a0332b56f6e03e15946fb9d8813cfe44aeeb0e6c (diff) |
drm/amdgpu: cleanup in kernel job submission
Add a job_alloc_with_ib helper and proper job submission.
Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Alex Deucher <alexander.deucer@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 37 |
1 files changed, 12 insertions, 25 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c index 46f2bdb76d20..4e98be8b29fb 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | |||
@@ -823,14 +823,6 @@ int amdgpu_uvd_ring_parse_cs(struct amdgpu_cs_parser *parser, uint32_t ib_idx) | |||
823 | return 0; | 823 | return 0; |
824 | } | 824 | } |
825 | 825 | ||
826 | static int amdgpu_uvd_free_job( | ||
827 | struct amdgpu_job *job) | ||
828 | { | ||
829 | amdgpu_ib_free(job->adev, job->ibs); | ||
830 | kfree(job->ibs); | ||
831 | return 0; | ||
832 | } | ||
833 | |||
834 | static int amdgpu_uvd_send_msg(struct amdgpu_ring *ring, | 826 | static int amdgpu_uvd_send_msg(struct amdgpu_ring *ring, |
835 | struct amdgpu_bo *bo, | 827 | struct amdgpu_bo *bo, |
836 | struct fence **fence) | 828 | struct fence **fence) |
@@ -838,7 +830,8 @@ static int amdgpu_uvd_send_msg(struct amdgpu_ring *ring, | |||
838 | struct ttm_validate_buffer tv; | 830 | struct ttm_validate_buffer tv; |
839 | struct ww_acquire_ctx ticket; | 831 | struct ww_acquire_ctx ticket; |
840 | struct list_head head; | 832 | struct list_head head; |
841 | struct amdgpu_ib *ib = NULL; | 833 | struct amdgpu_job *job; |
834 | struct amdgpu_ib *ib; | ||
842 | struct fence *f = NULL; | 835 | struct fence *f = NULL; |
843 | struct amdgpu_device *adev = ring->adev; | 836 | struct amdgpu_device *adev = ring->adev; |
844 | uint64_t addr; | 837 | uint64_t addr; |
@@ -862,15 +855,12 @@ static int amdgpu_uvd_send_msg(struct amdgpu_ring *ring, | |||
862 | r = ttm_bo_validate(&bo->tbo, &bo->placement, true, false); | 855 | r = ttm_bo_validate(&bo->tbo, &bo->placement, true, false); |
863 | if (r) | 856 | if (r) |
864 | goto err; | 857 | goto err; |
865 | ib = kzalloc(sizeof(struct amdgpu_ib), GFP_KERNEL); | 858 | |
866 | if (!ib) { | 859 | r = amdgpu_job_alloc_with_ib(adev, 64, &job); |
867 | r = -ENOMEM; | ||
868 | goto err; | ||
869 | } | ||
870 | r = amdgpu_ib_get(adev, NULL, 64, ib); | ||
871 | if (r) | 860 | if (r) |
872 | goto err1; | 861 | goto err; |
873 | 862 | ||
863 | ib = &job->ibs[0]; | ||
874 | addr = amdgpu_bo_gpu_offset(bo); | 864 | addr = amdgpu_bo_gpu_offset(bo); |
875 | ib->ptr[0] = PACKET0(mmUVD_GPCOM_VCPU_DATA0, 0); | 865 | ib->ptr[0] = PACKET0(mmUVD_GPCOM_VCPU_DATA0, 0); |
876 | ib->ptr[1] = addr; | 866 | ib->ptr[1] = addr; |
@@ -882,12 +872,9 @@ static int amdgpu_uvd_send_msg(struct amdgpu_ring *ring, | |||
882 | ib->ptr[i] = PACKET2(0); | 872 | ib->ptr[i] = PACKET2(0); |
883 | ib->length_dw = 16; | 873 | ib->length_dw = 16; |
884 | 874 | ||
885 | r = amdgpu_sched_ib_submit_kernel_helper(adev, ring, ib, 1, | 875 | r = amdgpu_job_submit(job, ring, AMDGPU_FENCE_OWNER_UNDEFINED, &f); |
886 | &amdgpu_uvd_free_job, | ||
887 | AMDGPU_FENCE_OWNER_UNDEFINED, | ||
888 | &f); | ||
889 | if (r) | 876 | if (r) |
890 | goto err2; | 877 | goto err_free; |
891 | 878 | ||
892 | ttm_eu_fence_buffer_objects(&ticket, &head, f); | 879 | ttm_eu_fence_buffer_objects(&ticket, &head, f); |
893 | 880 | ||
@@ -897,10 +884,10 @@ static int amdgpu_uvd_send_msg(struct amdgpu_ring *ring, | |||
897 | fence_put(f); | 884 | fence_put(f); |
898 | 885 | ||
899 | return 0; | 886 | return 0; |
900 | err2: | 887 | |
901 | amdgpu_ib_free(ring->adev, ib); | 888 | err_free: |
902 | err1: | 889 | amdgpu_job_free(job); |
903 | kfree(ib); | 890 | |
904 | err: | 891 | err: |
905 | ttm_eu_backoff_reservation(&ticket, &head); | 892 | ttm_eu_backoff_reservation(&ticket, &head); |
906 | return r; | 893 | return r; |