From: "Christian König" <ckoenig.leichtzumerken-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
To: Emily Deng <Emily.Deng-5C7GfCeVMHo@public.gmane.org>,
amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org
Cc: Monk Liu <Monk.Liu-5C7GfCeVMHo@public.gmane.org>
Subject: Re: [PATCH] drm/amdgpu: give more chance for tlb flush if failed
Date: Tue, 20 Mar 2018 11:23:53 +0100 [thread overview]
Message-ID: <1a54a624-2816-c03f-bc75-da30be2ae48e@gmail.com> (raw)
In-Reply-To: <1521527344-25641-1-git-send-email-Emily.Deng-5C7GfCeVMHo@public.gmane.org>
Am 20.03.2018 um 07:29 schrieb Emily Deng:
> under SR-IOV sometimes CPU based tlb flush would timeout
> within the given 100ms period, instead let it fail and
> continue we can give it more chance to repeat the
> tlb flush on the failed VMHUB
>
> this could fix the massive "Timeout waiting for VM flush ACK"
> error during vk_encoder test.
Well that one is a big NAK since it once more just hides the real
problem that we sometimes drop register writes.
What we did during debugging to avoid the problem is the following:
> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> index a70cbc45c4c1..3536d50375fa 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> @@ -338,6 +338,10 @@ static void gmc_v9_0_flush_gpu_tlb(struct
> amdgpu_device *adev,
> u32 tmp = gmc_v9_0_get_invalidate_req(vmid);
>
> WREG32_NO_KIQ(hub->vm_inv_eng0_req + eng, tmp);
> + while (RREG32_NO_KIQ(hub->vm_inv_eng0_req + eng) != tmp) {
> + DRM_ERROR("Need one more try to write the
> VMHUB flush request!");
> + WREG32_NO_KIQ(hub->vm_inv_eng0_req + eng, tmp);
> + }
>
> /* Busy wait for ACK.*/
> for (j = 0; j < 100; j++) {
But that can only be a temporary workaround as well.
The question is rather can you reliable reproduce this issue with the
vk_encoder test?
Thanks,
Christian.
>
> Signed-off-by: Monk Liu <Monk.Liu@amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c | 24 +++++++++++++++++++-----
> 1 file changed, 19 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> index a70cbc4..517712b 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> @@ -329,13 +329,18 @@ static void gmc_v9_0_flush_gpu_tlb(struct amdgpu_device *adev,
> {
> /* Use register 17 for GART */
> const unsigned eng = 17;
> - unsigned i, j;
> + unsigned i, j, loop = 0;
> + unsigned flush_done = 0;
> +
> +retry:
>
> spin_lock(&adev->gmc.invalidate_lock);
>
> for (i = 0; i < AMDGPU_MAX_VMHUBS; ++i) {
> struct amdgpu_vmhub *hub = &adev->vmhub[i];
> u32 tmp = gmc_v9_0_get_invalidate_req(vmid);
> + if (flush_done & (1 << i)) /* this vmhub flushed */
> + continue;
>
> WREG32_NO_KIQ(hub->vm_inv_eng0_req + eng, tmp);
>
> @@ -347,8 +352,10 @@ static void gmc_v9_0_flush_gpu_tlb(struct amdgpu_device *adev,
> break;
> cpu_relax();
> }
> - if (j < 100)
> + if (j < 100) {
> + flush_done |= (1 << i);
> continue;
> + }
>
> /* Wait for ACK with a delay.*/
> for (j = 0; j < adev->usec_timeout; j++) {
> @@ -358,15 +365,22 @@ static void gmc_v9_0_flush_gpu_tlb(struct amdgpu_device *adev,
> break;
> udelay(1);
> }
> - if (j < adev->usec_timeout)
> + if (j < adev->usec_timeout) {
> + flush_done |= (1 << i);
> continue;
> -
> - DRM_ERROR("Timeout waiting for VM flush ACK!\n");
> + }
> }
>
> spin_unlock(&adev->gmc.invalidate_lock);
> + if (flush_done != 3) {
> + if (loop++ < 3)
> + goto retry;
> + else
> + DRM_ERROR("Timeout waiting for VM flush ACK!\n");
> + }
> }
>
> +
> static uint64_t gmc_v9_0_emit_flush_gpu_tlb(struct amdgpu_ring *ring,
> unsigned vmid, uint64_t pd_addr)
> {
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
next prev parent reply other threads:[~2018-03-20 10:23 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-20 6:29 [PATCH] drm/amdgpu: give more chance for tlb flush if failed Emily Deng
[not found] ` <1521527344-25641-1-git-send-email-Emily.Deng-5C7GfCeVMHo@public.gmane.org>
2018-03-20 10:23 ` Christian König [this message]
[not found] ` <1a54a624-2816-c03f-bc75-da30be2ae48e-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2018-03-22 3:50 ` Deng, Emily
[not found] ` <CY4PR12MB112582B8413D7323ADCDD97C8FA90-rpdhrqHFk07v2MZdTKcfDgdYzm3356FpvxpqHgZTriW3zl9H0oFU5g@public.gmane.org>
2018-03-22 8:53 ` Christian König
[not found] ` <50377594-10f9-8aec-1b2b-acd974527503-5C7GfCeVMHo@public.gmane.org>
2018-03-23 3:13 ` Deng, Emily
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1a54a624-2816-c03f-bc75-da30be2ae48e@gmail.com \
--to=ckoenig.leichtzumerken-re5jqeeqqe8avxtiumwx3w@public.gmane.org \
--cc=Emily.Deng-5C7GfCeVMHo@public.gmane.org \
--cc=Monk.Liu-5C7GfCeVMHo@public.gmane.org \
--cc=amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
--cc=christian.koenig-5C7GfCeVMHo@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox