| From 0710096af72cd91b0a0855aaf58e32f5f87d6f35 Mon Sep 17 00:00:00 2001 |
| From: Philip Yang <Philip.Yang@amd.com> |
| Date: Wed, 30 Jan 2019 15:21:16 -0500 |
| Subject: drm/amdgpu: use spin_lock_irqsave to protect vm_manager.pasid_idr |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| [ Upstream commit 0a5f49cbf9d6ad3721c16f8a6d823363ea7a160f ] |
| |
| amdgpu_vm_get_task_info is called from interrupt handler and sched timeout |
| workqueue, we should use irq version spin_lock to avoid deadlock. |
| |
| Signed-off-by: Philip Yang <Philip.Yang@amd.com> |
| Reviewed-by: Christian Kรถnig <christian.koenig@amd.com> |
| Signed-off-by: Alex Deucher <alexander.deucher@amd.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 5 +++-- |
| 1 file changed, 3 insertions(+), 2 deletions(-) |
| |
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c |
| index 6a84526e20e0..49fe5084c53d 100644 |
| --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c |
| +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c |
| @@ -3011,14 +3011,15 @@ void amdgpu_vm_get_task_info(struct amdgpu_device *adev, unsigned int pasid, |
| struct amdgpu_task_info *task_info) |
| { |
| struct amdgpu_vm *vm; |
| + unsigned long flags; |
| |
| - spin_lock(&adev->vm_manager.pasid_lock); |
| + spin_lock_irqsave(&adev->vm_manager.pasid_lock, flags); |
| |
| vm = idr_find(&adev->vm_manager.pasid_idr, pasid); |
| if (vm) |
| *task_info = vm->task_info; |
| |
| - spin_unlock(&adev->vm_manager.pasid_lock); |
| + spin_unlock_irqrestore(&adev->vm_manager.pasid_lock, flags); |
| } |
| |
| /** |
| -- |
| 2.19.1 |
| |