]> www.infradead.org Git - linux.git/commitdiff
drm/xe/guc/ct: Flush g2h worker in case of g2h response timeout
authorBadal Nilawar <badal.nilawar@intel.com>
Thu, 17 Oct 2024 11:14:10 +0000 (16:44 +0530)
committerLucas De Marchi <lucas.demarchi@intel.com>
Thu, 24 Oct 2024 17:42:52 +0000 (12:42 -0500)
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 <badal.nilawar@intel.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Matthew Auld <matthew.auld@intel.com>
Cc: John Harrison <John.C.Harrison@Intel.com>
Cc: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
Reviewed-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
Acked-by: Matthew Brost <matthew.brost@intel.com>
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20241017111410.2553784-2-badal.nilawar@intel.com
(cherry picked from commit e5152723380404acb8175e0777b1cea57f319a01)
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
drivers/gpu/drm/xe/xe_guc_ct.c

index d16eb9ab49fbb8ff8c190495e344f4b7871ac825..17986bfd881876275e9222a85e597a6a9f7ea6b5 100644 (file)
@@ -897,6 +897,24 @@ retry_same_fence:
 
        ret = wait_event_timeout(ct->g2h_fence_wq, g2h_fence.done, HZ);
 
+       /*
+        * Occasionally it is seen that the G2H worker starts running after a delay of more than
+        * a second even after being queued and activated by the Linux workqueue subsystem. This
+        * leads to G2H timeout error. The root cause of issue lies with scheduling latency of
+        * Lunarlake Hybrid CPU. Issue dissappears if we disable Lunarlake atom cores from BIOS
+        * and this is beyond xe kmd.
+        *
+        * TODO: Drop this change once workqueue scheduling delay issue is fixed on LNL Hybrid CPU.
+        */
+       if (!ret) {
+               flush_work(&ct->g2h_worker);
+               if (g2h_fence.done) {
+                       xe_gt_warn(gt, "G2H fence %u, action %04x, done\n",
+                                  g2h_fence.seqno, action[0]);
+                       ret = 1;
+               }
+       }
+
        /*
         * Ensure we serialize with completion side to prevent UAF with fence going out of scope on
         * the stack, since we have no clue if it will fire after the timeout before we can erase