From: "Christian König" <ckoenig.leichtzumerken@gmail.com>
To: Friedrich Vock <friedrich.vock@gmx.de>, amd-gfx@lists.freedesktop.org
Cc: Alex Deucher <alexander.deucher@amd.com>,
stable@vger.kernel.org, Joshua Ashton <joshua@froggi.es>
Subject: Re: [PATCH 2/2] drm/amdgpu: Process fences on IH overflow
Date: Tue, 16 Jan 2024 08:17:43 +0100 [thread overview]
Message-ID: <3df101b7-8df6-44a0-8c53-aaec480a1907@gmail.com> (raw)
In-Reply-To: <8e81fd02-c5e3-4c0c-bb8f-b81217863ce2@gmx.de>
Am 15.01.24 um 12:19 schrieb Friedrich Vock:
> On 15.01.24 11:26, Christian König wrote:
>> Am 14.01.24 um 14:00 schrieb Friedrich Vock:
>>> If the IH ring buffer overflows, it's possible that fence signal events
>>> were lost. Check each ring for progress to prevent job timeouts/GPU
>>> hangs due to the fences staying unsignaled despite the work being done.
>>
>> That's completely unnecessary and in some cases even harmful.
> How is it harmful? The only effect it can have is prevent unnecessary
> GPU hangs, no? It's not like it hides any legitimate errors that you'd
> otherwise see.
We have no guarantee that all ring buffers are actually fully
initialized to allow fence processing.
Apart from that fence processing is the least of your problems when an
IV overflow occurs. Other interrupt source which are not repeated are
usually for more worse.
>>
>> We already have a timeout handler for that and overflows point to
>> severe system problem so they should never occur in a production system.
>
> IH ring buffer overflows are pretty reliably reproducible if you trigger
> a lot of page faults, at least on Deck. Why shouldn't enough page faults
> in quick succession be able to overflow the IH ring buffer?
At least not on recent hw generations. Since gfx9 we have a rate limit
on the number of page faults generated.
What could maybe do as well is to change the default of vm_fault_stop,
but for your case that would be even worse in production.
>
> The fence fallback timer as it is now is useless for this because it
> only gets triggered once after 0.5s. I guess an alternative approach
> would be to make a timer trigger for each work item in flight every
> 0.5s, but why should that be better than just handling overflow errors
> as they occur?
That is intentional. As I said an IH overflow just points out that there
is something massively wrong in the HW programming.
After gfx9 the IH should never produce overflow any more, otherwise
either the ratelimit doesn't work or isn't enabled for some reason or
the IH ring buffer is just to small.
Regards,
Christian.
>
> Regards,
> Friedrich
>
>>
>> Regards,
>> Christian.
>>
>>>
>>> Cc: Joshua Ashton <joshua@froggi.es>
>>> Cc: Alex Deucher <alexander.deucher@amd.com>
>>> Cc: stable@vger.kernel.org
>>>
>>> Signed-off-by: Friedrich Vock <friedrich.vock@gmx.de>
>>> ---
>>> drivers/gpu/drm/amd/amdgpu/amdgpu_ih.c | 15 +++++++++++++++
>>> 1 file changed, 15 insertions(+)
>>>
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.c
>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.c
>>> index f3b0aaf3ebc6..2a246db1d3a7 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.c
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.c
>>> @@ -209,6 +209,7 @@ int amdgpu_ih_process(struct amdgpu_device *adev,
>>> struct amdgpu_ih_ring *ih)
>>> {
>>> unsigned int count;
>>> u32 wptr;
>>> + int i;
>>>
>>> if (!ih->enabled || adev->shutdown)
>>> return IRQ_NONE;
>>> @@ -227,6 +228,20 @@ int amdgpu_ih_process(struct amdgpu_device
>>> *adev, struct amdgpu_ih_ring *ih)
>>> ih->rptr &= ih->ptr_mask;
>>> }
>>>
>>> + /* If the ring buffer overflowed, we might have lost some fence
>>> + * signal interrupts. Check if there was any activity so the
>>> signal
>>> + * doesn't get lost.
>>> + */
>>> + if (ih->overflow) {
>>> + for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
>>> + struct amdgpu_ring *ring = adev->rings[i];
>>> +
>>> + if (!ring || !ring->fence_drv.initialized)
>>> + continue;
>>> + amdgpu_fence_process(ring);
>>> + }
>>> + }
>>> +
>>> amdgpu_ih_set_rptr(adev, ih);
>>> wake_up_all(&ih->wait_process);
>>>
>>> --
>>> 2.43.0
>>>
>>
next prev parent reply other threads:[~2024-01-16 7:18 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-14 13:00 [PATCH 1/2] drm/amdgpu: Reset IH OVERFLOW_CLEAR bit after writing rptr Friedrich Vock
2024-01-14 13:00 ` [PATCH 2/2] drm/amdgpu: Process fences on IH overflow Friedrich Vock
2024-01-15 10:26 ` Christian König
2024-01-15 11:19 ` Friedrich Vock
2024-01-16 7:17 ` Christian König [this message]
[not found] ` <69cec077-4011-4738-bbb0-8fb1e6f52159@gmail.com>
2024-01-15 11:18 ` [PATCH 1/2] drm/amdgpu: Reset IH OVERFLOW_CLEAR bit after writing rptr Friedrich Vock
2024-01-16 7:03 ` Christian König
2024-01-16 10:31 ` Friedrich Vock
2024-01-17 12:27 ` Christian König
2024-01-17 23:00 ` Alex Deucher
2024-01-17 23:44 ` Friedrich Vock
2024-01-18 12:07 ` Christian König
2024-01-19 19:18 ` Felix Kuehling
2024-01-22 10:10 ` Christian König
2024-01-22 10:21 ` Friedrich Vock
2024-01-22 10:45 ` Friedrich Vock
2024-01-22 13:35 ` Christian König
2024-01-22 22:39 ` Joshua Ashton
2024-01-23 9:36 ` Christian König
2024-01-23 11:35 ` Friedrich Vock
2024-01-23 12:49 ` Christian König
2024-02-02 11:11 ` Joshua Ashton
2024-02-02 13:31 ` Christian König
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=3df101b7-8df6-44a0-8c53-aaec480a1907@gmail.com \
--to=ckoenig.leichtzumerken@gmail.com \
--cc=alexander.deucher@amd.com \
--cc=amd-gfx@lists.freedesktop.org \
--cc=friedrich.vock@gmx.de \
--cc=joshua@froggi.es \
--cc=stable@vger.kernel.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