Commit 42068e1e authored by Christian König's avatar Christian König Committed by Alex Deucher
Browse files

drm/amdgpu: fix dma_fence_wait without reference



We need to grab a reference to the fence we wait for.

Signed-off-by: default avatarChristian König <christian.koenig@amd.com>
Reviewed-by: default avatarChunming Zhou <david1.zhou@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 7837951a
Loading
Loading
Loading
Loading
+15 −12
Original line number Diff line number Diff line
@@ -534,22 +534,25 @@ int amdgpu_ctx_wait_prev_fence(struct amdgpu_ctx *ctx,
			       struct drm_sched_entity *entity)
{
	struct amdgpu_ctx_entity *centity = to_amdgpu_ctx_entity(entity);
	unsigned idx = centity->sequence & (amdgpu_sched_jobs - 1);
	struct dma_fence *other = centity->fences[idx];
	struct dma_fence *other;
	unsigned idx;
	long r;

	spin_lock(&ctx->ring_lock);
	idx = centity->sequence & (amdgpu_sched_jobs - 1);
	other = dma_fence_get(centity->fences[idx]);
	spin_unlock(&ctx->ring_lock);

	if (!other)
		return 0;

	if (other) {
		signed long r;
	r = dma_fence_wait(other, true);
		if (r < 0) {
			if (r != -ERESTARTSYS)
	if (r < 0 && r != -ERESTARTSYS)
		DRM_ERROR("Error (%ld) waiting for fence!\n", r);

	dma_fence_put(other);
	return r;
}
	}

	return 0;
}

void amdgpu_ctx_mgr_init(struct amdgpu_ctx_mgr *mgr)
{