diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3134-drm-amdgpu-fix-amdgpu_vm_pasid_fault_credit.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3134-drm-amdgpu-fix-amdgpu_vm_pasid_fault_credit.patch | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3134-drm-amdgpu-fix-amdgpu_vm_pasid_fault_credit.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3134-drm-amdgpu-fix-amdgpu_vm_pasid_fault_credit.patch new file mode 100644 index 00000000..b717672d --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3134-drm-amdgpu-fix-amdgpu_vm_pasid_fault_credit.patch @@ -0,0 +1,48 @@ +From f342a72e0cd39404072688aa3601df7278505ef0 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com> +Date: Tue, 9 Jan 2018 19:18:59 +0100 +Subject: [PATCH 3134/4131] drm/amdgpu: fix amdgpu_vm_pasid_fault_credit +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +As soon as the lock is dropped the VM pointer can be invalid. + +Signed-off-by: Christian König <christian.koenig@amd.com> +Reviewed-by: Chunming Zhou <david1.zhou@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 10 +++++++--- + 1 file changed, 7 insertions(+), 3 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +index e1d56f6..5c629dd 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +@@ -2549,17 +2549,21 @@ bool amdgpu_vm_pasid_fault_credit(struct amdgpu_device *adev, + + spin_lock(&adev->vm_manager.pasid_lock); + vm = idr_find(&adev->vm_manager.pasid_idr, pasid); +- spin_unlock(&adev->vm_manager.pasid_lock); +- if (!vm) ++ if (!vm) { + /* VM not found, can't track fault credit */ ++ spin_unlock(&adev->vm_manager.pasid_lock); + return true; ++ } + + /* No lock needed. only accessed by IRQ handler */ +- if (!vm->fault_credit) ++ if (!vm->fault_credit) { + /* Too many faults in this VM */ ++ spin_unlock(&adev->vm_manager.pasid_lock); + return false; ++ } + + vm->fault_credit--; ++ spin_unlock(&adev->vm_manager.pasid_lock); + return true; + } + +-- +2.7.4 + |