aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChunming Zhou <David1.Zhou@amd.com>2016-01-14 22:12:42 -0500
committerAlex Deucher <alexander.deucher@amd.com>2016-02-10 14:16:50 -0500
commitbe86c606b50a53b60f3591ba94dd687524f2ee21 (patch)
tree2cd73ca2cbc4705e4013cad3800026969173d5e9
parent2f4b9400336effee61cbf7f55b7dc35a39096ae1 (diff)
drm/amdgpu: cleanup amdgpu_sync_rings V2
No longer needed now that semaphores are gone. V2: remove the first amdgpu_sync_wait in amdgpu_ib_schedule Signed-off-by: Chunming Zhou <David1.Zhou@amd.com> Reviewed-by: Ken Wang <Qingqing.Wang@amd.com> (V1) Reviewed-by: Monk Liu <monk.liu@amd.com> (V2) Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu.h2
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c10
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c42
3 files changed, 3 insertions, 51 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
index 745a9a1ae54b..8c55c1d78ffe 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -654,8 +654,6 @@ int amdgpu_sync_resv(struct amdgpu_device *adev,
654 struct amdgpu_sync *sync, 654 struct amdgpu_sync *sync,
655 struct reservation_object *resv, 655 struct reservation_object *resv,
656 void *owner); 656 void *owner);
657int amdgpu_sync_rings(struct amdgpu_sync *sync,
658 struct amdgpu_ring *ring);
659struct fence *amdgpu_sync_get_fence(struct amdgpu_sync *sync); 657struct fence *amdgpu_sync_get_fence(struct amdgpu_sync *sync);
660int amdgpu_sync_wait(struct amdgpu_sync *sync); 658int amdgpu_sync_wait(struct amdgpu_sync *sync);
661void amdgpu_sync_free(struct amdgpu_device *adev, struct amdgpu_sync *sync, 659void amdgpu_sync_free(struct amdgpu_device *adev, struct amdgpu_sync *sync,
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
index 9e25edafa721..3b58d70b73cd 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
@@ -141,11 +141,7 @@ int amdgpu_ib_schedule(struct amdgpu_device *adev, unsigned num_ibs,
141 dev_err(adev->dev, "couldn't schedule ib\n"); 141 dev_err(adev->dev, "couldn't schedule ib\n");
142 return -EINVAL; 142 return -EINVAL;
143 } 143 }
144 r = amdgpu_sync_wait(&ibs->sync); 144
145 if (r) {
146 dev_err(adev->dev, "IB sync failed (%d).\n", r);
147 return r;
148 }
149 r = amdgpu_ring_lock(ring, (256 + AMDGPU_NUM_SYNCS * 8) * num_ibs); 145 r = amdgpu_ring_lock(ring, (256 + AMDGPU_NUM_SYNCS * 8) * num_ibs);
150 if (r) { 146 if (r) {
151 dev_err(adev->dev, "scheduling IB failed (%d).\n", r); 147 dev_err(adev->dev, "scheduling IB failed (%d).\n", r);
@@ -161,10 +157,10 @@ int amdgpu_ib_schedule(struct amdgpu_device *adev, unsigned num_ibs,
161 } 157 }
162 } 158 }
163 159
164 r = amdgpu_sync_rings(&ibs->sync, ring); 160 r = amdgpu_sync_wait(&ibs->sync);
165 if (r) { 161 if (r) {
166 amdgpu_ring_unlock_undo(ring); 162 amdgpu_ring_unlock_undo(ring);
167 dev_err(adev->dev, "failed to sync rings (%d)\n", r); 163 dev_err(adev->dev, "failed to sync wait (%d)\n", r);
168 return r; 164 return r;
169 } 165 }
170 166
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c
index a6fee511aab5..7f12a4d55c52 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c
@@ -261,48 +261,6 @@ int amdgpu_sync_wait(struct amdgpu_sync *sync)
261} 261}
262 262
263/** 263/**
264 * amdgpu_sync_rings - sync ring to all registered fences
265 *
266 * @sync: sync object to use
267 * @ring: ring that needs sync
268 *
269 * Ensure that all registered fences are signaled before letting
270 * the ring continue. The caller must hold the ring lock.
271 */
272int amdgpu_sync_rings(struct amdgpu_sync *sync,
273 struct amdgpu_ring *ring)
274{
275 struct amdgpu_device *adev = ring->adev;
276 int i, r;
277
278 for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
279 struct amdgpu_ring *other = adev->rings[i];
280 struct amdgpu_fence *fence;
281
282 if (!sync->sync_to[i])
283 continue;
284
285 fence = to_amdgpu_fence(sync->sync_to[i]);
286
287 /* prevent GPU deadlocks */
288 if (!other->ready) {
289 dev_err(adev->dev, "Syncing to a disabled ring!");
290 return -EINVAL;
291 }
292
293 if (amdgpu_enable_scheduler) {
294 r = fence_wait(sync->sync_to[i], true);
295 if (r)
296 return r;
297 continue;
298 }
299
300 }
301
302 return 0;
303}
304
305/**
306 * amdgpu_sync_free - free the sync object 264 * amdgpu_sync_free - free the sync object
307 * 265 *
308 * @adev: amdgpu_device pointer 266 * @adev: amdgpu_device pointer