printk_ratelimit() is much better suited to limit the number of reported
VM faults.

Signed-off-by: Christian König <christian.koe...@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 6904d794d60a..570150ceeb16 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
@@ -3052,7 +3052,6 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct 
amdgpu_vm *vm,
        }
 
        INIT_KFIFO(vm->faults);
-       vm->fault_credit = 16;
 
        return 0;
 
@@ -3262,42 +3261,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 3abffd06b5c7..9be687d31684 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 a99f71797aa3..0f50bef87163 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.14.1

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to