diff options
author | Chunming Zhou <David1.Zhou@amd.com> | 2016-01-14 22:12:42 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2016-02-10 14:16:50 -0500 |
commit | be86c606b50a53b60f3591ba94dd687524f2ee21 (patch) | |
tree | 2cd73ca2cbc4705e4013cad3800026969173d5e9 | |
parent | 2f4b9400336effee61cbf7f55b7dc35a39096ae1 (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.h | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c | 10 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c | 42 |
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); |
657 | int amdgpu_sync_rings(struct amdgpu_sync *sync, | ||
658 | struct amdgpu_ring *ring); | ||
659 | struct fence *amdgpu_sync_get_fence(struct amdgpu_sync *sync); | 657 | struct fence *amdgpu_sync_get_fence(struct amdgpu_sync *sync); |
660 | int amdgpu_sync_wait(struct amdgpu_sync *sync); | 658 | int amdgpu_sync_wait(struct amdgpu_sync *sync); |
661 | void amdgpu_sync_free(struct amdgpu_device *adev, struct amdgpu_sync *sync, | 659 | void 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 | */ | ||
272 | int 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 |