[PATCH] drm/amdgpu: improve wait logic at fence polling

Alex Deucher alexdeucher at gmail.com
Fri May 12 16:27:29 UTC 2023


On Mon, May 1, 2023 at 11:13 AM Felix Kuehling <felix.kuehling at amd.com> wrote:
>
> Am 2023-04-26 um 12:15 schrieb Alex Sierra:
> > Accomplish this by reading the seq number right away instead of sleep
> > for 5us. There are certain cases where the fence is ready almost
> > immediately. Sleep number granularity was also reduced as the majority
> > of the kiq tlb flush takes between 2us to 6us.
> >
> > Signed-off-by: Alex Sierra <alex.sierra at amd.com>
>
> I'm not sure I have authority to give an R-b for this. But the change
> and the explanation sound reasonable to me. Doing the first check before
> waiting is a no-brainer. Reducing the delay can increase CPU usage or
> bus traffic and may be more controversial.
>

The fences should be in system memory, so it shouldn't affect bus
traffic, but there could be more CPU usage.  The change seems fine to
me.
Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

> FWIW, this patch is
>
> Acked-by: Felix Kuehling <Felix.Kuehling at amd.com>
>
>
> > ---
> >   drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c | 11 ++++-------
> >   1 file changed, 4 insertions(+), 7 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
> > index a7627cc0118d..9192896239e9 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
> > @@ -377,14 +377,11 @@ signed long amdgpu_fence_wait_polling(struct amdgpu_ring *ring,
> >                                     uint32_t wait_seq,
> >                                     signed long timeout)
> >   {
> > -     uint32_t seq;
> > -
> > -     do {
> > -             seq = amdgpu_fence_read(ring);
> > -             udelay(5);
> > -             timeout -= 5;
> > -     } while ((int32_t)(wait_seq - seq) > 0 && timeout > 0);
> >
> > +     while ((int32_t)(wait_seq - amdgpu_fence_read(ring)) > 0 && timeout > 0) {
> > +             udelay(2);
> > +             timeout -= 2;
> > +     }
> >       return timeout > 0 ? timeout : 0;
> >   }
> >   /**


More information about the amd-gfx mailing list