diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 9 | 
1 files changed, 5 insertions, 4 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c index 245c66ea10e7..a05cce3f3170 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c @@ -519,22 +519,20 @@ int amdgpu_vm_flush(struct amdgpu_ring *ring, struct amdgpu_job *job,  	unsigned vmhub = ring->funcs->vmhub;  	struct amdgpu_vmid_mgr *id_mgr = &adev->vm_manager.id_mgr[vmhub];  	struct amdgpu_vmid *id = &id_mgr->ids[job->vmid]; +	bool spm_update_needed = job->spm_update_needed;  	bool gds_switch_needed = ring->funcs->emit_gds_switch &&  		job->gds_switch_needed;  	bool vm_flush_needed = job->vm_needs_flush;  	struct dma_fence *fence = NULL;  	bool pasid_mapping_needed = false;  	unsigned patch_offset = 0; -	bool update_spm_vmid_needed = (job->vm && (job->vm->reserved_vmid[vmhub] != NULL));  	int r; -	if (update_spm_vmid_needed && adev->gfx.rlc.funcs->update_spm_vmid) -		adev->gfx.rlc.funcs->update_spm_vmid(adev, job->vmid); -  	if (amdgpu_vmid_had_gpu_reset(adev, id)) {  		gds_switch_needed = true;  		vm_flush_needed = true;  		pasid_mapping_needed = true; +		spm_update_needed = true;  	}  	mutex_lock(&id_mgr->lock); @@ -567,6 +565,9 @@ int amdgpu_vm_flush(struct amdgpu_ring *ring, struct amdgpu_job *job,  	if (pasid_mapping_needed)  		amdgpu_gmc_emit_pasid_mapping(ring, job->vmid, job->pasid); +	if (spm_update_needed && adev->gfx.rlc.funcs->update_spm_vmid) +		adev->gfx.rlc.funcs->update_spm_vmid(adev, job->vmid); +  	if (!ring->is_mes_queue && ring->funcs->emit_gds_switch &&  	    gds_switch_needed) {  		amdgpu_ring_emit_gds_switch(ring, job->vmid, job->gds_base, | 
