[PATCH 03/11] drm/amdgpu: remove VM fault_credit handling

Alex Deucher alexdeucher at gmail.com
Fri Nov 30 16:04:18 UTC 2018


On Fri, Nov 30, 2018 at 7:36 AM Christian König
<ckoenig.leichtzumerken at gmail.com> wrote:
>
> printk_ratelimit() is much better suited to limit the number of reported
> VM faults.
>
> 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/amdgpu_vm.c  | 37 -------------------------
>  drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h  |  5 ----
>  drivers/gpu/drm/amd/amdgpu/cik_ih.c     | 18 +-----------
>  drivers/gpu/drm/amd/amdgpu/cz_ih.c      | 18 +-----------
>  drivers/gpu/drm/amd/amdgpu/iceland_ih.c | 18 +-----------
>  drivers/gpu/drm/amd/amdgpu/tonga_ih.c   | 18 +-----------
>  drivers/gpu/drm/amd/amdgpu/vega10_ih.c  |  7 ++---
>  7 files changed, 6 insertions(+), 115 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> index 2acb9838913e..a2f149da83f8 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> @@ -3057,7 +3057,6 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm,
>         }
>
>         INIT_KFIFO(vm->faults);
> -       vm->fault_credit = 16;
>
>         return 0;
>
> @@ -3269,42 +3268,6 @@ void amdgpu_vm_fini(struct amdgpu_device *adev, struct amdgpu_vm *vm)
>                 amdgpu_vmid_free_reserved(adev, vm, i);
>  }
>
> -/**
> - * amdgpu_vm_pasid_fault_credit - Check fault credit for given PASID
> - *
> - * @adev: amdgpu_device pointer
> - * @pasid: PASID do identify the VM
> - *
> - * This function is expected to be called in interrupt context.
> - *
> - * Returns:
> - * True if there was fault credit, false otherwise
> - */
> -bool amdgpu_vm_pasid_fault_credit(struct amdgpu_device *adev,
> -                                 unsigned int pasid)
> -{
> -       struct amdgpu_vm *vm;
> -
> -       spin_lock(&adev->vm_manager.pasid_lock);
> -       vm = idr_find(&adev->vm_manager.pasid_idr, pasid);
> -       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) {
> -               /* 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;
> -}
> -
>  /**
>   * amdgpu_vm_manager_init - init the VM manager
>   *
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
> index 2a8898d19c8b..e8dcfd59fc93 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
> @@ -229,9 +229,6 @@ struct amdgpu_vm {
>         /* Up to 128 pending retry page faults */
>         DECLARE_KFIFO(faults, u64, 128);
>
> -       /* Limit non-retry fault storms */
> -       unsigned int            fault_credit;
> -
>         /* Points to the KFD process VM info */
>         struct amdkfd_process_info *process_info;
>
> @@ -299,8 +296,6 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm,
>  int amdgpu_vm_make_compute(struct amdgpu_device *adev, struct amdgpu_vm *vm, unsigned int pasid);
>  void amdgpu_vm_release_compute(struct amdgpu_device *adev, struct amdgpu_vm *vm);
>  void amdgpu_vm_fini(struct amdgpu_device *adev, struct amdgpu_vm *vm);
> -bool amdgpu_vm_pasid_fault_credit(struct amdgpu_device *adev,
> -                                 unsigned int pasid);
>  void amdgpu_vm_get_pd_bo(struct amdgpu_vm *vm,
>                          struct list_head *validated,
>                          struct amdgpu_bo_list_entry *entry);
> diff --git a/drivers/gpu/drm/amd/amdgpu/cik_ih.c b/drivers/gpu/drm/amd/amdgpu/cik_ih.c
> index b5775c6a857b..3e6c8c4067cb 100644
> --- a/drivers/gpu/drm/amd/amdgpu/cik_ih.c
> +++ b/drivers/gpu/drm/amd/amdgpu/cik_ih.c
> @@ -237,23 +237,7 @@ static u32 cik_ih_get_wptr(struct amdgpu_device *adev)
>   */
>  static bool cik_ih_prescreen_iv(struct amdgpu_device *adev)
>  {
> -       u32 ring_index = adev->irq.ih.rptr >> 2;
> -       u16 pasid;
> -
> -       switch (le32_to_cpu(adev->irq.ih.ring[ring_index]) & 0xff) {
> -       case 146:
> -       case 147:
> -               pasid = le32_to_cpu(adev->irq.ih.ring[ring_index + 2]) >> 16;
> -               if (!pasid || amdgpu_vm_pasid_fault_credit(adev, pasid))
> -                       return true;
> -               break;
> -       default:
> -               /* Not a VM fault */
> -               return true;
> -       }
> -
> -       adev->irq.ih.rptr += 16;
> -       return false;
> +       return true;
>  }
>
>   /**
> diff --git a/drivers/gpu/drm/amd/amdgpu/cz_ih.c b/drivers/gpu/drm/amd/amdgpu/cz_ih.c
> index df5ac4d85a00..447b3cbc47e5 100644
> --- a/drivers/gpu/drm/amd/amdgpu/cz_ih.c
> +++ b/drivers/gpu/drm/amd/amdgpu/cz_ih.c
> @@ -216,23 +216,7 @@ static u32 cz_ih_get_wptr(struct amdgpu_device *adev)
>   */
>  static bool cz_ih_prescreen_iv(struct amdgpu_device *adev)
>  {
> -       u32 ring_index = adev->irq.ih.rptr >> 2;
> -       u16 pasid;
> -
> -       switch (le32_to_cpu(adev->irq.ih.ring[ring_index]) & 0xff) {
> -       case 146:
> -       case 147:
> -               pasid = le32_to_cpu(adev->irq.ih.ring[ring_index + 2]) >> 16;
> -               if (!pasid || amdgpu_vm_pasid_fault_credit(adev, pasid))
> -                       return true;
> -               break;
> -       default:
> -               /* Not a VM fault */
> -               return true;
> -       }
> -
> -       adev->irq.ih.rptr += 16;
> -       return false;
> +       return true;
>  }
>
>  /**
> diff --git a/drivers/gpu/drm/amd/amdgpu/iceland_ih.c b/drivers/gpu/drm/amd/amdgpu/iceland_ih.c
> index cf0fc61aebe6..2b94a6d1550e 100644
> --- a/drivers/gpu/drm/amd/amdgpu/iceland_ih.c
> +++ b/drivers/gpu/drm/amd/amdgpu/iceland_ih.c
> @@ -216,23 +216,7 @@ static u32 iceland_ih_get_wptr(struct amdgpu_device *adev)
>   */
>  static bool iceland_ih_prescreen_iv(struct amdgpu_device *adev)
>  {
> -       u32 ring_index = adev->irq.ih.rptr >> 2;
> -       u16 pasid;
> -
> -       switch (le32_to_cpu(adev->irq.ih.ring[ring_index]) & 0xff) {
> -       case 146:
> -       case 147:
> -               pasid = le32_to_cpu(adev->irq.ih.ring[ring_index + 2]) >> 16;
> -               if (!pasid || amdgpu_vm_pasid_fault_credit(adev, pasid))
> -                       return true;
> -               break;
> -       default:
> -               /* Not a VM fault */
> -               return true;
> -       }
> -
> -       adev->irq.ih.rptr += 16;
> -       return false;
> +       return true;
>  }
>
>  /**
> diff --git a/drivers/gpu/drm/amd/amdgpu/tonga_ih.c b/drivers/gpu/drm/amd/amdgpu/tonga_ih.c
> index dcdbb4d72472..9d7b43da6acc 100644
> --- a/drivers/gpu/drm/amd/amdgpu/tonga_ih.c
> +++ b/drivers/gpu/drm/amd/amdgpu/tonga_ih.c
> @@ -227,23 +227,7 @@ static u32 tonga_ih_get_wptr(struct amdgpu_device *adev)
>   */
>  static bool tonga_ih_prescreen_iv(struct amdgpu_device *adev)
>  {
> -       u32 ring_index = adev->irq.ih.rptr >> 2;
> -       u16 pasid;
> -
> -       switch (le32_to_cpu(adev->irq.ih.ring[ring_index]) & 0xff) {
> -       case 146:
> -       case 147:
> -               pasid = le32_to_cpu(adev->irq.ih.ring[ring_index + 2]) >> 16;
> -               if (!pasid || amdgpu_vm_pasid_fault_credit(adev, pasid))
> -                       return true;
> -               break;
> -       default:
> -               /* Not a VM fault */
> -               return true;
> -       }
> -
> -       adev->irq.ih.rptr += 16;
> -       return false;
> +       return true;
>  }
>
>  /**
> diff --git a/drivers/gpu/drm/amd/amdgpu/vega10_ih.c b/drivers/gpu/drm/amd/amdgpu/vega10_ih.c
> index d84b687240d1..b49290bcf109 100644
> --- a/drivers/gpu/drm/amd/amdgpu/vega10_ih.c
> +++ b/drivers/gpu/drm/amd/amdgpu/vega10_ih.c
> @@ -258,12 +258,9 @@ static bool vega10_ih_prescreen_iv(struct amdgpu_device *adev)
>         if (!pasid)
>                 return true;
>
> -       /* Not a retry fault, check fault credit */
> -       if (!(dw5 & 0x80)) {
> -               if (!amdgpu_vm_pasid_fault_credit(adev, pasid))
> -                       goto ignore_iv;
> +       /* Not a retry fault */
> +       if (!(dw5 & 0x80))
>                 return true;
> -       }
>
>         /* Track retry faults in per-VM fault FIFO. */
>         spin_lock(&adev->vm_manager.pasid_lock);
> --
> 2.17.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