Commit 4f399a08 authored by Christian König's avatar Christian König Committed by Alex Deucher

drm/amdgpu: sanitize fence numbers

Looks like the VCE block sometimes still sends nonsense
fence numbers on startup.
Signed-off-by: default avatarChristian König <christian.koenig@amd.com>
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 737a44b1
...@@ -204,16 +204,22 @@ void amdgpu_fence_process(struct amdgpu_ring *ring) ...@@ -204,16 +204,22 @@ void amdgpu_fence_process(struct amdgpu_ring *ring)
if (seq != ring->fence_drv.sync_seq) if (seq != ring->fence_drv.sync_seq)
amdgpu_fence_schedule_fallback(ring); amdgpu_fence_schedule_fallback(ring);
last_seq &= drv->num_fences_mask;
seq &= drv->num_fences_mask;
while (last_seq != seq) { while (last_seq != seq) {
struct fence *fence, **ptr; struct fence *fence, **ptr;
ptr = &drv->fences[++last_seq & drv->num_fences_mask]; ++last_seq;
last_seq &= drv->num_fences_mask;
ptr = &drv->fences[last_seq];
/* There is always exactly one thread signaling this fence slot */ /* There is always exactly one thread signaling this fence slot */
fence = rcu_dereference_protected(*ptr, 1); fence = rcu_dereference_protected(*ptr, 1);
RCU_INIT_POINTER(*ptr, NULL); RCU_INIT_POINTER(*ptr, NULL);
BUG_ON(!fence); if (!fence)
continue;
r = fence_signal(fence); r = fence_signal(fence);
if (!r) if (!r)
......
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