Re: [PATCH v2 2/4] drm/xe/multi_queue: handle CGP_SYNC wait timeout during VF recovery
Matthew Brost <[email protected]> Mon, 3 Aug 2026 10:06:05 -0700
| Newsgroups | org.freedesktop.lists.intel-xe |
|---|---|
| Message-ID | <[email protected]> |
On Fri, Jul 31, 2026 at 04:26:25PM -0700, Niranjana Vishwanathapura wrote: > The CGP_SYNC wait in xe_guc_exec_queue_group_cgp_sync() only woke on > sync_pending clearing or GuC stop. During VF migration the CT wakes all > waiters but sync_pending may still be set (the GuC lost the in-flight > message), causing the timeout path to fire and ban the group. > > Add vf_recovery() as a third wake condition and exclude it from the > error path so a migration-woken wait returns success rather than > triggering a GT reset. > > Assisted-by: Github-Copilot:Claude-opus-4.8 > Signed-off-by: Niranjana Vishwanathapura <[email protected]> Reviewed-by: Matthew Brost <[email protected]> > --- > drivers/gpu/drm/xe/xe_guc_submit.c | 7 +++---- > 1 file changed, 3 insertions(+), 4 deletions(-) > > diff --git a/drivers/gpu/drm/xe/xe_guc_submit.c b/drivers/gpu/drm/xe/xe_guc_submit.c > index 314747336fb9..13d0ab8052e5 100644 > --- a/drivers/gpu/drm/xe/xe_guc_submit.c > +++ b/drivers/gpu/drm/xe/xe_guc_submit.c > @@ -815,13 +815,12 @@ static void xe_guc_exec_queue_group_cgp_sync(struct xe_guc *guc, > * Hence, no locking is required here. > * Wait for any pending CGP_SYNC_DONE response before updating the > * CGP page and sending CGP_SYNC message. > - * > - * FIXME: Support VF migration > */ > ret = wait_event_timeout(guc->ct.wq, > !READ_ONCE(group->sync_pending) || > - xe_guc_read_stopped(guc), HZ); > - if (!ret || xe_guc_read_stopped(guc)) { > + xe_guc_read_stopped(guc) || vf_recovery(guc), > + HZ); > + if ((!ret && !vf_recovery(guc)) || xe_guc_read_stopped(guc)) { > /* CGP_SYNC failed. Reset gt, cleanup the group */ > xe_gt_warn(guc_to_gt(guc), "Wait for CGP_SYNC_DONE response failed!\n"); > set_exec_queue_group_banned(q); > -- > 2.43.0 >