Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9a1b3af1 authored by Monk Liu's avatar Monk Liu Committed by Alex Deucher
Browse files

drm/amdgpu:protect cs submit



to prevent submit two or more IBs with PREEMPT flags.

Signed-off-by: default avatarMonk Liu <Monk.Liu@amd.com>
Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 2a9ceb8d
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -888,7 +888,7 @@ static int amdgpu_cs_ib_fill(struct amdgpu_device *adev,
	struct amdgpu_fpriv *fpriv = parser->filp->driver_priv;
	struct amdgpu_vm *vm = &fpriv->vm;
	int i, j;
	int r;
	int r, ce_preempt = 0, de_preempt = 0;

	for (i = 0, j = 0; i < parser->nchunks && j < parser->job->num_ibs; i++) {
		struct amdgpu_cs_chunk *chunk;
@@ -903,6 +903,17 @@ static int amdgpu_cs_ib_fill(struct amdgpu_device *adev,
		if (chunk->chunk_id != AMDGPU_CHUNK_ID_IB)
			continue;

		if (ib->flags & AMDGPU_IB_FLAG_PREEMPT) {
			if (ib->flags & AMDGPU_IB_FLAG_CE)
				ce_preempt++;
			else
				de_preempt++;
		}

		/* only one preemptible IB per submit for me/ce */
		if (ce_preempt > 1 || de_preempt > 1)
			return -EINVAL;

		r = amdgpu_cs_get_ring(adev, chunk_ib->ip_type,
				       chunk_ib->ip_instance, chunk_ib->ring,
				       &ring);