aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian König <christian.koenig@amd.com>2016-07-05 08:48:17 -0400
committerAlex Deucher <alexander.deucher@amd.com>2016-07-14 16:46:05 -0400
commit22a77cf6d87e0cfadf91bf7d09bae71359bc85f6 (patch)
tree99f3d92e688847a8d17c47996709ed43d11e4b00
parent0808663517dd7e1583c1a8e48f0acfb2c0a127cd (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.c6
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_job.c8
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c2
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c4
-rw-r--r--drivers/gpu/drm/amd/amdgpu/cik_sdma.c1
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c1
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c2
-rw-r--r--drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c1
-rw-r--r--drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c1
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
180err:
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
677err1: 677err1:
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);
681err0: 680err0:
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
2160err2: 2160err2:
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);
2164err1: 2163err1:
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 }
831err2: 831err2:
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);
835err1: 834err1:
@@ -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
1721fail: 1720fail:
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
731err1: 731err1:
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);
735err0: 734err0:
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 }
960err1: 960err1:
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);
964err0: 963err0: