[PATCH] drm/amdgpu: lock the eviction fence before signaling it
Liang, Prike
Prike.Liang at amd.com
Fri May 9 06:31:08 UTC 2025
[Public]
> -----Original Message-----
> From: Koenig, Christian <Christian.Koenig at amd.com>
> Sent: Thursday, May 8, 2025 9:56 PM
> To: Liang, Prike <Prike.Liang at amd.com>; amd-gfx at lists.freedesktop.org
> Cc: Deucher, Alexander <Alexander.Deucher at amd.com>
> Subject: Re: [PATCH] drm/amdgpu: lock the eviction fence before signaling it
>
>
>
> On 5/8/25 15:44, Prike Liang wrote:
> > Lock and refer to the eviction fence before trying to signal it.
> >
> > Signed-off-by: Prike Liang <Prike.Liang at amd.com>
> > ---
> > drivers/gpu/drm/amd/amdgpu/amdgpu_eviction_fence.c | 5 ++++-
> > 1 file changed, 4 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_eviction_fence.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_eviction_fence.c
> > index 1a7469543db5..dd272c1fcbb4 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_eviction_fence.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_eviction_fence.c
> > @@ -108,13 +108,16 @@ amdgpu_eviction_fence_suspend_worker(struct
> work_struct *work)
> > struct amdgpu_eviction_fence *ev_fence;
> >
> > mutex_lock(&uq_mgr->userq_mutex);
> > - ev_fence = evf_mgr->ev_fence;
> > + spin_lock(&evf_mgr->ev_fence_lock);
> > + ev_fence = (struct amdgpu_eviction_fence *)dma_fence_get(&evf_mgr-
> >ev_fence->base);
>
> That case is not a good approach, instead put the dma_fence_get on a separate
> line.
Thank for the suggestion, as such change can benefit on the readability?
Do you mean something like the following change?
struct amdgpu_eviction_fence *ev_fence;
+ struct amdgpu_eviction_fence *ev_fence = NULL;
+ struct dma_fence *base_fence;
mutex_lock(&uq_mgr->userq_mutex);
- ev_fence = evf_mgr->ev_fence;
+ spin_lock(&evf_mgr->ev_fence_lock);
+ base_fence = dma_fence_get(&evf_mgr->ev_fence->base);
+ if (base_fence)
+ ev_fence = (struct amdgpu_eviction_fence *)base_fence;
+ spin_unlock(&evf_mgr->ev_fence_lock);
if (!ev_fence)
goto unlock;
amdgpu_userq_evict(uq_mgr, ev_fence);
unlock:
+ dma_fence_put(base_fence);
> Apart from that it looks good to me.
>
> Christian.
>
> > + spin_unlock(&evf_mgr->ev_fence_lock);
> > if (!ev_fence)
> > goto unlock;
> >
> > amdgpu_userq_evict(uq_mgr, ev_fence);
> >
> > unlock:
> > + dma_fence_put(&evf_mgr->ev_fence->base);
> > mutex_unlock(&uq_mgr->userq_mutex);
> > }
> >
More information about the amd-gfx
mailing list