Skip to content

Commit 22ef43c

Browse files
bnilawarlucasdemarchi
authored andcommitted
drm/xe/guc/ct: Flush g2h worker in case of g2h response timeout
In case if g2h worker doesn't get opportunity to within specified timeout delay then flush the g2h worker explicitly. v2: - Describe change in the comment and add TODO (Matt B/John H) - Add xe_gt_warn on fence done after G2H flush (John H) v3: - Updated the comment with root cause - Clean up xe_gt_warn message (John H) Closes: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1620 Closes: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2902 Signed-off-by: Badal Nilawar <[email protected]> Cc: Matthew Brost <[email protected]> Cc: Matthew Auld <[email protected]> Cc: John Harrison <[email protected]> Cc: Himal Prasad Ghimiray <[email protected]> Reviewed-by: Himal Prasad Ghimiray <[email protected]> Acked-by: Matthew Brost <[email protected]> Signed-off-by: Matthew Brost <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected] (cherry picked from commit e515272) Signed-off-by: Lucas De Marchi <[email protected]>
1 parent c8fb95e commit 22ef43c

File tree

1 file changed

+18
-0
lines changed

1 file changed

+18
-0
lines changed

drivers/gpu/drm/xe/xe_guc_ct.c

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -897,6 +897,24 @@ static int guc_ct_send_recv(struct xe_guc_ct *ct, const u32 *action, u32 len,
897897

898898
ret = wait_event_timeout(ct->g2h_fence_wq, g2h_fence.done, HZ);
899899

900+
/*
901+
* Occasionally it is seen that the G2H worker starts running after a delay of more than
902+
* a second even after being queued and activated by the Linux workqueue subsystem. This
903+
* leads to G2H timeout error. The root cause of issue lies with scheduling latency of
904+
* Lunarlake Hybrid CPU. Issue dissappears if we disable Lunarlake atom cores from BIOS
905+
* and this is beyond xe kmd.
906+
*
907+
* TODO: Drop this change once workqueue scheduling delay issue is fixed on LNL Hybrid CPU.
908+
*/
909+
if (!ret) {
910+
flush_work(&ct->g2h_worker);
911+
if (g2h_fence.done) {
912+
xe_gt_warn(gt, "G2H fence %u, action %04x, done\n",
913+
g2h_fence.seqno, action[0]);
914+
ret = 1;
915+
}
916+
}
917+
900918
/*
901919
* Ensure we serialize with completion side to prevent UAF with fence going out of scope on
902920
* the stack, since we have no clue if it will fire after the timeout before we can erase

0 commit comments

Comments
 (0)