mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
drm/xe/vf: Flush and stop CTs in VF post migration recovery
Flushing CTs (i.e., progressing all pending G2H messages) gives VF post-migration recovery an accurate view of which H2G messages the GuC has processed, enabling the GuC submission state machine to correctly rebuild all state. Also, stop all CT traffic, as the CT is not live during VF post-migration recovery. v3: - xe_guc_ct_flush_and_stop rename (Michal) - Drop extra GuC CT WQ wake up (Michal) Signed-off-by: Matthew Brost <matthew.brost@intel.com> Reviewed-by: Michal Wajdeczko <michal.wajdeczko@intel.com> Link: https://lore.kernel.org/r/20251008214532.3442967-21-matthew.brost@intel.com
This commit is contained in:
@@ -1105,6 +1105,7 @@ static void vf_post_migration_shutdown(struct xe_gt *gt)
|
||||
gt->sriov.vf.migration.recovery_queued = false;
|
||||
spin_unlock_irq(>->sriov.vf.migration.lock);
|
||||
|
||||
xe_guc_ct_flush_and_stop(>->uc.guc.ct);
|
||||
xe_guc_submit_pause(>->uc.guc);
|
||||
}
|
||||
|
||||
|
||||
@@ -574,6 +574,16 @@ void xe_guc_ct_disable(struct xe_guc_ct *ct)
|
||||
stop_g2h_handler(ct);
|
||||
}
|
||||
|
||||
/**
|
||||
* xe_guc_ct_flush_and_stop - Flush and stop all processing of G2H / H2G
|
||||
* @ct: the &xe_guc_ct
|
||||
*/
|
||||
void xe_guc_ct_flush_and_stop(struct xe_guc_ct *ct)
|
||||
{
|
||||
receive_g2h(ct);
|
||||
xe_guc_ct_stop(ct);
|
||||
}
|
||||
|
||||
/**
|
||||
* xe_guc_ct_stop - Set GuC to stopped state
|
||||
* @ct: the &xe_guc_ct
|
||||
|
||||
@@ -17,6 +17,7 @@ int xe_guc_ct_init_post_hwconfig(struct xe_guc_ct *ct);
|
||||
int xe_guc_ct_enable(struct xe_guc_ct *ct);
|
||||
void xe_guc_ct_disable(struct xe_guc_ct *ct);
|
||||
void xe_guc_ct_stop(struct xe_guc_ct *ct);
|
||||
void xe_guc_ct_flush_and_stop(struct xe_guc_ct *ct);
|
||||
void xe_guc_ct_fast_path(struct xe_guc_ct *ct);
|
||||
|
||||
struct xe_guc_ct_snapshot *xe_guc_ct_snapshot_capture(struct xe_guc_ct *ct);
|
||||
|
||||
Reference in New Issue
Block a user