Commit 95d7fc4a authored by Andrey Grodzovsky's avatar Andrey Grodzovsky Committed by Alex Deucher

drm/amdgpu: Move fence SW fallback warning v3

Only print the warning if there was actually some fence processed
from the SW fallback timer.

v2: Add return value to amdgpu_fence_process to let
amdgpu_fence_fallback know fences were actually
processed and then print the warning.

v3: Always return true if seq != last_seq
Signed-off-by: default avatarAndrey Grodzovsky <andrey.grodzovsky@amd.com>
Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
Acked-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 425c3143
...@@ -216,8 +216,10 @@ static void amdgpu_fence_schedule_fallback(struct amdgpu_ring *ring) ...@@ -216,8 +216,10 @@ static void amdgpu_fence_schedule_fallback(struct amdgpu_ring *ring)
* Checks the current fence value and calculates the last * Checks the current fence value and calculates the last
* signalled fence value. Wakes the fence queue if the * signalled fence value. Wakes the fence queue if the
* sequence number has increased. * sequence number has increased.
*
* Returns true if fence was processed
*/ */
void amdgpu_fence_process(struct amdgpu_ring *ring) bool amdgpu_fence_process(struct amdgpu_ring *ring)
{ {
struct amdgpu_fence_driver *drv = &ring->fence_drv; struct amdgpu_fence_driver *drv = &ring->fence_drv;
uint32_t seq, last_seq; uint32_t seq, last_seq;
...@@ -234,7 +236,7 @@ void amdgpu_fence_process(struct amdgpu_ring *ring) ...@@ -234,7 +236,7 @@ void amdgpu_fence_process(struct amdgpu_ring *ring)
amdgpu_fence_schedule_fallback(ring); amdgpu_fence_schedule_fallback(ring);
if (unlikely(seq == last_seq)) if (unlikely(seq == last_seq))
return; return false;
last_seq &= drv->num_fences_mask; last_seq &= drv->num_fences_mask;
seq &= drv->num_fences_mask; seq &= drv->num_fences_mask;
...@@ -261,6 +263,8 @@ void amdgpu_fence_process(struct amdgpu_ring *ring) ...@@ -261,6 +263,8 @@ void amdgpu_fence_process(struct amdgpu_ring *ring)
dma_fence_put(fence); dma_fence_put(fence);
} while (last_seq != seq); } while (last_seq != seq);
return true;
} }
/** /**
...@@ -275,8 +279,8 @@ static void amdgpu_fence_fallback(struct timer_list *t) ...@@ -275,8 +279,8 @@ static void amdgpu_fence_fallback(struct timer_list *t)
struct amdgpu_ring *ring = from_timer(ring, t, struct amdgpu_ring *ring = from_timer(ring, t,
fence_drv.fallback_timer); fence_drv.fallback_timer);
DRM_WARN("Fence fallback timer expired on ring %s\n", ring->name); if (amdgpu_fence_process(ring))
amdgpu_fence_process(ring); DRM_WARN("Fence fallback timer expired on ring %s\n", ring->name);
} }
/** /**
......
...@@ -97,7 +97,7 @@ void amdgpu_fence_driver_resume(struct amdgpu_device *adev); ...@@ -97,7 +97,7 @@ void amdgpu_fence_driver_resume(struct amdgpu_device *adev);
int amdgpu_fence_emit(struct amdgpu_ring *ring, struct dma_fence **fence, int amdgpu_fence_emit(struct amdgpu_ring *ring, struct dma_fence **fence,
unsigned flags); unsigned flags);
int amdgpu_fence_emit_polling(struct amdgpu_ring *ring, uint32_t *s); int amdgpu_fence_emit_polling(struct amdgpu_ring *ring, uint32_t *s);
void amdgpu_fence_process(struct amdgpu_ring *ring); bool amdgpu_fence_process(struct amdgpu_ring *ring);
int amdgpu_fence_wait_empty(struct amdgpu_ring *ring); int amdgpu_fence_wait_empty(struct amdgpu_ring *ring);
signed long amdgpu_fence_wait_polling(struct amdgpu_ring *ring, signed long amdgpu_fence_wait_polling(struct amdgpu_ring *ring,
uint32_t wait_seq, uint32_t wait_seq,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment