Am 18.03.25 um 15:54 schrieb Arvind Yadav: > The display is freezing because the amdgpu_userq_wait_ioctl() > is waiting for a non-user queue fence(specifically, the PT update fence). > > RootCause: > The resume_work is initiated by both amdgpu_userq_suspend and > amdgpu_userqueue_ensure_ev_fence at same time. The amdgpu_userq_suspend > signals a dma-fence and subsequently triggers the resume_work, which is > intended to replace the existing fence by creating new dma-fence. However, > following this, the amdgpu_userqueue_ensure_ev_fence schedules another > resume_work that generates a new dma-fence, thereby replacing the one > created by amdgpu_userq_suspend. Consequently, the original fence will > never be signaled. > > Cc: Alex Deucher <alexander.deucher@xxxxxxx> > Cc: Christian König <christian.koenig@xxxxxxx> > Cc: Shashank Sharma <shashank.sharma@xxxxxxx> > Cc: Sunil Khatri <sunil.khatri@xxxxxxx> > Signed-off-by: Arvind Yadav <arvind.yadav@xxxxxxx> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_eviction_fence.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_eviction_fence.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_eviction_fence.c > index 167951aee502..0075469550b0 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_eviction_fence.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_eviction_fence.c > @@ -52,6 +52,9 @@ amdgpu_eviction_fence_replace_fence(struct amdgpu_eviction_fence_mgr *evf_mgr, > unsigned long index; > int ret; > > + if (evf_mgr->ev_fence && > + !dma_fence_is_signaled(&evf_mgr->ev_fence->base)) > + return 0; We might want to also have a flush_work(&evf_mgr->suspend_work) before that test as well to make sure an in flight signaling has finished as well. With that done Reviewed-by: Christian König <christian.koenig@xxxxxxx>. Thanks, Christian. > /* > * Steps to replace eviction fence: > * * lock all objects in exec (caller)