*/
xe_ggtt_shift_nodes(tile->mem.ggtt, start);
- if (xe_sriov_vf_migration_supported(gt_to_xe(gt))) {
- WRITE_ONCE(gt->sriov.vf.migration.ggtt_need_fixes, false);
- smp_wmb(); /* Ensure above write visible before wake */
- wake_up_all(>->sriov.vf.migration.wq);
- }
-
return 0;
}
xe_default_lrc_update_memirq_regs_with_address(hwe);
}
+static void vf_post_migration_mark_fixups_done(struct xe_gt *gt)
+{
+ WRITE_ONCE(gt->sriov.vf.migration.ggtt_need_fixes, false);
+ smp_wmb(); /* Ensure above write visible before wake */
+ wake_up_all(>->sriov.vf.migration.wq);
+}
+
static void vf_start_migration_recovery(struct xe_gt *gt)
{
bool started;
if (err)
goto fail;
+ vf_post_migration_mark_fixups_done(gt);
vf_post_migration_rearm(gt);
err = vf_post_migration_resfix_done(gt, marker);
}
/**
- * xe_gt_sriov_vf_wait_valid_ggtt() - VF wait for valid GGTT addresses
+ * xe_gt_sriov_vf_wait_valid_ggtt() - wait for valid GGTT nodes and address refs
* @gt: the &xe_gt
*/
void xe_gt_sriov_vf_wait_valid_ggtt(struct xe_gt *gt)
bool recovery_queued;
/** @recovery_inprogress: VF post migration recovery in progress */
bool recovery_inprogress;
- /** @ggtt_need_fixes: VF GGTT needs fixes */
+ /** @ggtt_need_fixes: VF GGTT and references to it need fixes */
bool ggtt_need_fixes;
};