[PATCH 1/2] drm/amdgpu: fix locking in vega10_ih_prescreen_iv
Alex Deucher
alexdeucher at gmail.com
Wed Jan 24 18:58:09 UTC 2018
On Wed, Jan 24, 2018 at 7:39 AM, Christian König
<ckoenig.leichtzumerken at gmail.com> wrote:
> The vm pointer can become invalid as soon as the lock is released.
>
> Signed-off-by: Christian König <christian.koenig at amd.com>
Acked-by: Alex Deucher <alexander.deucher at 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 926c2d305c33..9589e0a2f14a 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.14.1
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
More information about the amd-gfx
mailing list