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

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
...@@ -888,7 +888,7 @@ static int amdgpu_cs_ib_fill(struct amdgpu_device *adev, ...@@ -888,7 +888,7 @@ static int amdgpu_cs_ib_fill(struct amdgpu_device *adev,
struct amdgpu_fpriv *fpriv = parser->filp->driver_priv; struct amdgpu_fpriv *fpriv = parser->filp->driver_priv;
struct amdgpu_vm *vm = &fpriv->vm; struct amdgpu_vm *vm = &fpriv->vm;
int i, j; 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++) { for (i = 0, j = 0; i < parser->nchunks && j < parser->job->num_ibs; i++) {
struct amdgpu_cs_chunk *chunk; struct amdgpu_cs_chunk *chunk;
...@@ -903,6 +903,17 @@ static int amdgpu_cs_ib_fill(struct amdgpu_device *adev, ...@@ -903,6 +903,17 @@ static int amdgpu_cs_ib_fill(struct amdgpu_device *adev,
if (chunk->chunk_id != AMDGPU_CHUNK_ID_IB) if (chunk->chunk_id != AMDGPU_CHUNK_ID_IB)
continue; 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, r = amdgpu_cs_get_ring(adev, chunk_ib->ip_type,
chunk_ib->ip_instance, chunk_ib->ring, chunk_ib->ip_instance, chunk_ib->ring,
&ring); &ring);
......
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