diff options
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/vega10_ih.c | 4 | 
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/vega10_ih.c b/drivers/gpu/drm/amd/amdgpu/vega10_ih.c index b69ceafb7888..746748e6b731 100644 --- a/drivers/gpu/drm/amd/amdgpu/vega10_ih.c +++ b/drivers/gpu/drm/amd/amdgpu/vega10_ih.c @@ -278,9 +278,9 @@ static bool vega10_ih_prescreen_iv(struct amdgpu_device *adev)  	/* Track retry faults in per-VM fault FIFO. */  	spin_lock(&adev->vm_manager.pasid_lock);  	vm = idr_find(&adev->vm_manager.pasid_idr, pasid); -	spin_unlock(&adev->vm_manager.pasid_lock);  	if (WARN_ON_ONCE(!vm)) {  		/* VM not found, process it normally */ +		spin_unlock(&adev->vm_manager.pasid_lock);  		amdgpu_ih_clear_fault(adev, key);  		return true;  	} @@ -288,9 +288,11 @@ static bool vega10_ih_prescreen_iv(struct amdgpu_device *adev)  	r = kfifo_put(&vm->faults, key);  	if (!r) {  		/* FIFO is full. Ignore it until there is space */ +		spin_unlock(&adev->vm_manager.pasid_lock);  		amdgpu_ih_clear_fault(adev, key);  		goto ignore_iv;  	} +	spin_unlock(&adev->vm_manager.pasid_lock);  	/* It's the first fault for this address, process it normally */  	return true;  | 
