diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 15 | 
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c index ec888fc6ead8..916b6b8cf7d9 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c @@ -1093,6 +1093,21 @@ static int amdgpu_cs_vm_handling(struct amdgpu_cs_parser *p)  	unsigned int i;  	int r; +	/* +	 * We can't use gang submit on with reserved VMIDs when the VM changes +	 * can't be invalidated by more than one engine at the same time. +	 */ +	if (p->gang_size > 1 && !p->adev->vm_manager.concurrent_flush) { +		for (i = 0; i < p->gang_size; ++i) { +			struct drm_sched_entity *entity = p->entities[i]; +			struct drm_gpu_scheduler *sched = entity->rq->sched; +			struct amdgpu_ring *ring = to_amdgpu_ring(sched); + +			if (amdgpu_vmid_uses_reserved(vm, ring->vm_hub)) +				return -EINVAL; +		} +	} +  	r = amdgpu_vm_clear_freed(adev, vm, NULL);  	if (r)  		return r;  |