]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/xe/vf: Kickstart after resfix in VF post migration recovery
authorMatthew Brost <matthew.brost@intel.com>
Wed, 8 Oct 2025 21:45:20 +0000 (14:45 -0700)
committerMatthew Brost <matthew.brost@intel.com>
Thu, 9 Oct 2025 10:22:46 +0000 (03:22 -0700)
GuC needs to be live for the GuC submission state machine to resubmit
anything lost during VF post-migration recovery.  Therefore, move the
kickstart step after `resfix` to ensure proper resubmission.

Signed-off-by: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Tomasz Lis <tomasz.lis@intel.com>
Link: https://lore.kernel.org/r/20251008214532.3442967-23-matthew.brost@intel.com
drivers/gpu/drm/xe/xe_gt_sriov_vf.c

index 75a20de71d8b98c9355eed141d1c8e54977b2069..34fb8699b7a2a26e53e0def63a3e6ef9197c1e7a 100644 (file)
@@ -1136,13 +1136,6 @@ static int vf_post_migration_fixups(struct xe_gt *gt)
 
 static void vf_post_migration_kickstart(struct xe_gt *gt)
 {
-       /*
-        * Make sure interrupts on the new HW are properly set. The GuC IRQ
-        * must be working at this point, since the recovery did started,
-        * but the rest was not enabled using the procedure from spec.
-        */
-       xe_irq_resume(gt_to_xe(gt));
-
        xe_guc_submit_unpause(&gt->uc.guc);
 }
 
@@ -1162,6 +1155,13 @@ static int vf_post_migration_notify_resfix_done(struct xe_gt *gt)
        if (skip_resfix)
                return -EAGAIN;
 
+       /*
+        * Make sure interrupts on the new HW are properly set. The GuC IRQ
+        * must be working at this point, since the recovery did started,
+        * but the rest was not enabled using the procedure from spec.
+        */
+       xe_irq_resume(gt_to_xe(gt));
+
        return vf_notify_resfix_done(gt);
 }
 
@@ -1185,11 +1185,12 @@ static void vf_post_migration_recovery(struct xe_gt *gt)
        if (err)
                goto fail;
 
-       vf_post_migration_kickstart(gt);
        err = vf_post_migration_notify_resfix_done(gt);
        if (err && err != -EAGAIN)
                goto fail;
 
+       vf_post_migration_kickstart(gt);
+
        xe_pm_runtime_put(xe);
        xe_gt_sriov_notice(gt, "migration recovery ended\n");
        return;