diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c | 43 |
1 files changed, 0 insertions, 43 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c index b13a74b273a6..b2df348aa223 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c | |||
@@ -67,8 +67,6 @@ void amdgpu_ring_free_size(struct amdgpu_ring *ring) | |||
67 | if (!ring->ring_free_dw) { | 67 | if (!ring->ring_free_dw) { |
68 | /* this is an empty ring */ | 68 | /* this is an empty ring */ |
69 | ring->ring_free_dw = ring->ring_size / 4; | 69 | ring->ring_free_dw = ring->ring_size / 4; |
70 | /* update lockup info to avoid false positive */ | ||
71 | amdgpu_ring_lockup_update(ring); | ||
72 | } | 70 | } |
73 | } | 71 | } |
74 | 72 | ||
@@ -209,46 +207,6 @@ void amdgpu_ring_unlock_undo(struct amdgpu_ring *ring) | |||
209 | } | 207 | } |
210 | 208 | ||
211 | /** | 209 | /** |
212 | * amdgpu_ring_lockup_update - update lockup variables | ||
213 | * | ||
214 | * @ring: amdgpu_ring structure holding ring information | ||
215 | * | ||
216 | * Update the last rptr value and timestamp (all asics). | ||
217 | */ | ||
218 | void amdgpu_ring_lockup_update(struct amdgpu_ring *ring) | ||
219 | { | ||
220 | atomic_set(&ring->last_rptr, amdgpu_ring_get_rptr(ring)); | ||
221 | atomic64_set(&ring->last_activity, jiffies_64); | ||
222 | } | ||
223 | |||
224 | /** | ||
225 | * amdgpu_ring_test_lockup() - check if ring is lockedup by recording information | ||
226 | * @ring: amdgpu_ring structure holding ring information | ||
227 | * | ||
228 | */ | ||
229 | bool amdgpu_ring_test_lockup(struct amdgpu_ring *ring) | ||
230 | { | ||
231 | uint32_t rptr = amdgpu_ring_get_rptr(ring); | ||
232 | uint64_t last = atomic64_read(&ring->last_activity); | ||
233 | uint64_t elapsed; | ||
234 | |||
235 | if (rptr != atomic_read(&ring->last_rptr)) { | ||
236 | /* ring is still working, no lockup */ | ||
237 | amdgpu_ring_lockup_update(ring); | ||
238 | return false; | ||
239 | } | ||
240 | |||
241 | elapsed = jiffies_to_msecs(jiffies_64 - last); | ||
242 | if (amdgpu_lockup_timeout && elapsed >= amdgpu_lockup_timeout) { | ||
243 | dev_err(ring->adev->dev, "ring %d stalled for more than %llumsec\n", | ||
244 | ring->idx, elapsed); | ||
245 | return true; | ||
246 | } | ||
247 | /* give a chance to the GPU ... */ | ||
248 | return false; | ||
249 | } | ||
250 | |||
251 | /** | ||
252 | * amdgpu_ring_backup - Back up the content of a ring | 210 | * amdgpu_ring_backup - Back up the content of a ring |
253 | * | 211 | * |
254 | * @ring: the ring we want to back up | 212 | * @ring: the ring we want to back up |
@@ -436,7 +394,6 @@ int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring, | |||
436 | if (amdgpu_debugfs_ring_init(adev, ring)) { | 394 | if (amdgpu_debugfs_ring_init(adev, ring)) { |
437 | DRM_ERROR("Failed to register debugfs file for rings !\n"); | 395 | DRM_ERROR("Failed to register debugfs file for rings !\n"); |
438 | } | 396 | } |
439 | amdgpu_ring_lockup_update(ring); | ||
440 | return 0; | 397 | return 0; |
441 | } | 398 | } |
442 | 399 | ||