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

Christian König ckoenig.leichtzumerken at gmail.com
Sat Dec 1 13:59:28 UTC 2018


This code was never used for retry faults, but only for non-retry faults 
and on HW generations older than GFX9.

Those handling where always protected by calls to "printk_ratelimit()" 
to prevent flooding the system log.

So the handling was never necessary to begin with,
Christian.

Am 30.11.18 um 22:07 schrieb Zeng, Oak:
> The credit was used to limit vm (retry) fault to be processed in each VM. If this is removed, it is possible that you get flooded interrupt storm.
>
> Even though you claimed from the commit message that, printk_ratelimit is a better solution, I didn't see you implement it in this patch. Are you planning a future patch?
>
> Thanks,
> Oak
>
> -----Original Message-----
> From: amd-gfx <amd-gfx-bounces at lists.freedesktop.org> On Behalf Of Christian König
> Sent: Friday, November 30, 2018 7:36 AM
> To: amd-gfx at lists.freedesktop.org
> Subject: [PATCH 03/11] drm/amdgpu: remove VM fault_credit handling
>
> 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>
> ---
>   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