[PATCH 1/2] drm/amdgpu: fix locking in vega10_ih_prescreen_iv

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux