OSDN Git Service

drm/amdgpu: remove VM fault_credit handling
authorChristian König <christian.koenig@amd.com>
Wed, 26 Sep 2018 09:15:36 +0000 (11:15 +0200)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 7 Dec 2018 23:14:20 +0000 (18:14 -0500)
printk_ratelimit() is much better suited to limit the number of reported
VM faults.

Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
drivers/gpu/drm/amd/amdgpu/cik_ih.c
drivers/gpu/drm/amd/amdgpu/cz_ih.c
drivers/gpu/drm/amd/amdgpu/iceland_ih.c
drivers/gpu/drm/amd/amdgpu/tonga_ih.c
drivers/gpu/drm/amd/amdgpu/vega10_ih.c

index b095bbb..fc91f3e 100644 (file)
@@ -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;
 
@@ -3265,42 +3264,6 @@ void amdgpu_vm_fini(struct amdgpu_device *adev, struct amdgpu_vm *vm)
 }
 
 /**
- * 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
  *
  * @adev: amdgpu_device pointer
index 2a8898d..e8dcfd5 100644 (file)
@@ -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);
index b5775c6..3e6c8c4 100644 (file)
@@ -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;
 }
 
  /**
index df5ac4d..447b3cb 100644 (file)
@@ -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;
 }
 
 /**
index cf0fc61..2b94a6d 100644 (file)
@@ -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;
 }
 
 /**
index dcdbb4d..9d7b43d 100644 (file)
@@ -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;
 }
 
 /**
index d84b687..b49290b 100644 (file)
@@ -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);