diff options
author | Christian König <christian.koenig@amd.com> | 2016-07-05 08:48:17 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2016-07-14 16:46:05 -0400 |
commit | 22a77cf6d87e0cfadf91bf7d09bae71359bc85f6 (patch) | |
tree | 99f3d92e688847a8d17c47996709ed43d11e4b00 | |
parent | 0808663517dd7e1583c1a8e48f0acfb2c0a127cd (diff) |
drm/amdgpu: cleanup hw reference handling in the IB tests
Reference should be taken when we make the assignment, not anywhere else.
Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c | 6 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_job.c | 8 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/cik_sdma.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | 1 |
9 files changed, 7 insertions, 19 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c index 46c3097c5224..428ebf3a4387 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c | |||
@@ -122,7 +122,6 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned num_ibs, | |||
122 | bool skip_preamble, need_ctx_switch; | 122 | bool skip_preamble, need_ctx_switch; |
123 | unsigned patch_offset = ~0; | 123 | unsigned patch_offset = ~0; |
124 | struct amdgpu_vm *vm; | 124 | struct amdgpu_vm *vm; |
125 | struct fence *hwf; | ||
126 | uint64_t ctx; | 125 | uint64_t ctx; |
127 | 126 | ||
128 | unsigned i; | 127 | unsigned i; |
@@ -190,7 +189,7 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned num_ibs, | |||
190 | if (ring->funcs->emit_hdp_invalidate) | 189 | if (ring->funcs->emit_hdp_invalidate) |
191 | amdgpu_ring_emit_hdp_invalidate(ring); | 190 | amdgpu_ring_emit_hdp_invalidate(ring); |
192 | 191 | ||
193 | r = amdgpu_fence_emit(ring, &hwf); | 192 | r = amdgpu_fence_emit(ring, f); |
194 | if (r) { | 193 | if (r) { |
195 | dev_err(adev->dev, "failed to emit fence (%d)\n", r); | 194 | dev_err(adev->dev, "failed to emit fence (%d)\n", r); |
196 | if (job && job->vm_id) | 195 | if (job && job->vm_id) |
@@ -205,9 +204,6 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned num_ibs, | |||
205 | AMDGPU_FENCE_FLAG_64BIT); | 204 | AMDGPU_FENCE_FLAG_64BIT); |
206 | } | 205 | } |
207 | 206 | ||
208 | if (f) | ||
209 | *f = fence_get(hwf); | ||
210 | |||
211 | if (patch_offset != ~0 && ring->funcs->patch_cond_exec) | 207 | if (patch_offset != ~0 && ring->funcs->patch_cond_exec) |
212 | amdgpu_ring_patch_cond_exec(ring, patch_offset); | 208 | amdgpu_ring_patch_cond_exec(ring, patch_offset); |
213 | 209 | ||
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c index aaee0c8f6731..6674d40eb3ab 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c | |||
@@ -172,15 +172,13 @@ static struct fence *amdgpu_job_run(struct amd_sched_job *sched_job) | |||
172 | trace_amdgpu_sched_run_job(job); | 172 | trace_amdgpu_sched_run_job(job); |
173 | r = amdgpu_ib_schedule(job->ring, job->num_ibs, job->ibs, | 173 | r = amdgpu_ib_schedule(job->ring, job->num_ibs, job->ibs, |
174 | job->sync.last_vm_update, job, &fence); | 174 | job->sync.last_vm_update, job, &fence); |
175 | if (r) { | 175 | if (r) |
176 | DRM_ERROR("Error scheduling IBs (%d)\n", r); | 176 | DRM_ERROR("Error scheduling IBs (%d)\n", r); |
177 | goto err; | ||
178 | } | ||
179 | 177 | ||
180 | err: | ||
181 | /* if gpu reset, hw fence will be replaced here */ | 178 | /* if gpu reset, hw fence will be replaced here */ |
182 | fence_put(job->fence); | 179 | fence_put(job->fence); |
183 | job->fence = fence; | 180 | job->fence = fence_get(fence); |
181 | amdgpu_job_free_resources(job); | ||
184 | return fence; | 182 | return fence; |
185 | } | 183 | } |
186 | 184 | ||
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c index 39c7c55f2d28..a0d39d281b4f 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | |||
@@ -968,7 +968,7 @@ static int amdgpu_uvd_send_msg(struct amdgpu_ring *ring, struct amdgpu_bo *bo, | |||
968 | 968 | ||
969 | if (direct) { | 969 | if (direct) { |
970 | r = amdgpu_ib_schedule(ring, 1, ib, NULL, NULL, &f); | 970 | r = amdgpu_ib_schedule(ring, 1, ib, NULL, NULL, &f); |
971 | job->fence = f; | 971 | job->fence = fence_get(f); |
972 | if (r) | 972 | if (r) |
973 | goto err_free; | 973 | goto err_free; |
974 | 974 | ||
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c index 718f22712335..aeeeb72ebbc4 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | |||
@@ -432,7 +432,7 @@ int amdgpu_vce_get_create_msg(struct amdgpu_ring *ring, uint32_t handle, | |||
432 | ib->ptr[i] = 0x0; | 432 | ib->ptr[i] = 0x0; |
433 | 433 | ||
434 | r = amdgpu_ib_schedule(ring, 1, ib, NULL, NULL, &f); | 434 | r = amdgpu_ib_schedule(ring, 1, ib, NULL, NULL, &f); |
435 | job->fence = f; | 435 | job->fence = fence_get(f); |
436 | if (r) | 436 | if (r) |
437 | goto err; | 437 | goto err; |
438 | 438 | ||
@@ -494,7 +494,7 @@ int amdgpu_vce_get_destroy_msg(struct amdgpu_ring *ring, uint32_t handle, | |||
494 | 494 | ||
495 | if (direct) { | 495 | if (direct) { |
496 | r = amdgpu_ib_schedule(ring, 1, ib, NULL, NULL, &f); | 496 | r = amdgpu_ib_schedule(ring, 1, ib, NULL, NULL, &f); |
497 | job->fence = f; | 497 | job->fence = fence_get(f); |
498 | if (r) | 498 | if (r) |
499 | goto err; | 499 | goto err; |
500 | 500 | ||
diff --git a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c index 46aca16a40aa..5d8e7a1f53e3 100644 --- a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c +++ b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c | |||
@@ -675,7 +675,6 @@ static int cik_sdma_ring_test_ib(struct amdgpu_ring *ring) | |||
675 | } | 675 | } |
676 | 676 | ||
677 | err1: | 677 | err1: |
678 | fence_put(f); | ||
679 | amdgpu_ib_free(adev, &ib, NULL); | 678 | amdgpu_ib_free(adev, &ib, NULL); |
680 | fence_put(f); | 679 | fence_put(f); |
681 | err0: | 680 | err0: |
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c index f6bd9465dbdc..ff7a5794b819 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | |||
@@ -2158,7 +2158,6 @@ static int gfx_v7_0_ring_test_ib(struct amdgpu_ring *ring) | |||
2158 | } | 2158 | } |
2159 | 2159 | ||
2160 | err2: | 2160 | err2: |
2161 | fence_put(f); | ||
2162 | amdgpu_ib_free(adev, &ib, NULL); | 2161 | amdgpu_ib_free(adev, &ib, NULL); |
2163 | fence_put(f); | 2162 | fence_put(f); |
2164 | err1: | 2163 | err1: |
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c index c30b6ac25d89..e3beb67186b9 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | |||
@@ -829,7 +829,6 @@ static int gfx_v8_0_ring_test_ib(struct amdgpu_ring *ring) | |||
829 | r = -EINVAL; | 829 | r = -EINVAL; |
830 | } | 830 | } |
831 | err2: | 831 | err2: |
832 | fence_put(f); | ||
833 | amdgpu_ib_free(adev, &ib, NULL); | 832 | amdgpu_ib_free(adev, &ib, NULL); |
834 | fence_put(f); | 833 | fence_put(f); |
835 | err1: | 834 | err1: |
@@ -1719,7 +1718,6 @@ static int gfx_v8_0_do_edc_gpr_workarounds(struct amdgpu_device *adev) | |||
1719 | RREG32(sec_ded_counter_registers[i]); | 1718 | RREG32(sec_ded_counter_registers[i]); |
1720 | 1719 | ||
1721 | fail: | 1720 | fail: |
1722 | fence_put(f); | ||
1723 | amdgpu_ib_free(adev, &ib, NULL); | 1721 | amdgpu_ib_free(adev, &ib, NULL); |
1724 | fence_put(f); | 1722 | fence_put(f); |
1725 | 1723 | ||
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c index ac3730a6e49f..f41e28d6c5fc 100644 --- a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c | |||
@@ -729,7 +729,6 @@ static int sdma_v2_4_ring_test_ib(struct amdgpu_ring *ring) | |||
729 | } | 729 | } |
730 | 730 | ||
731 | err1: | 731 | err1: |
732 | fence_put(f); | ||
733 | amdgpu_ib_free(adev, &ib, NULL); | 732 | amdgpu_ib_free(adev, &ib, NULL); |
734 | fence_put(f); | 733 | fence_put(f); |
735 | err0: | 734 | err0: |
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c index f00db6f4c04c..93e63816b06c 100644 --- a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | |||
@@ -958,7 +958,6 @@ static int sdma_v3_0_ring_test_ib(struct amdgpu_ring *ring) | |||
958 | r = -EINVAL; | 958 | r = -EINVAL; |
959 | } | 959 | } |
960 | err1: | 960 | err1: |
961 | fence_put(f); | ||
962 | amdgpu_ib_free(adev, &ib, NULL); | 961 | amdgpu_ib_free(adev, &ib, NULL); |
963 | fence_put(f); | 962 | fence_put(f); |
964 | err0: | 963 | err0: |