diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3293-drm-amdgpu-fix-locking-in-vega10_ih_prescreen_iv.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3293-drm-amdgpu-fix-locking-in-vega10_ih_prescreen_iv.patch | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3293-drm-amdgpu-fix-locking-in-vega10_ih_prescreen_iv.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3293-drm-amdgpu-fix-locking-in-vega10_ih_prescreen_iv.patch new file mode 100644 index 00000000..81e89dca --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3293-drm-amdgpu-fix-locking-in-vega10_ih_prescreen_iv.patch @@ -0,0 +1,46 @@ +From 4c56edf04f03978335d7b4a3bd97f39dbcf076ca Mon Sep 17 00:00:00 2001 +From: Christian Koenig <christian.koenig@amd.com> +Date: Wed, 24 Jan 2018 13:37:48 +0100 +Subject: [PATCH 3293/4131] drm/amdgpu: fix locking in vega10_ih_prescreen_iv +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The vm pointer can become invalid as soon as the lock is released. + +Signed-off-by: Christian König <christian.koenig@amd.com> +Acked-by: Alex Deucher <alexander.deucher@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/vega10_ih.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/vega10_ih.c b/drivers/gpu/drm/amd/amdgpu/vega10_ih.c +index 926c2d3..9589e0a 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; +-- +2.7.4 + |