mirror of
https://github.com/torvalds/linux.git
synced 2026-06-02 11:33:28 +02:00
drm/xe: Add infrastructure for delayed LRC capture
Add a xe_guc_exec_queue_snapshot_capture_delayed and xe_lrc_snapshot_capture_delayed function to capture the contents of LRC in the next patch. Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> Reviewed-by: José Roberto de Souza <jose.souza@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20240227131248.92910-2-maarten.lankhorst@linux.intel.com
This commit is contained in:
parent
47058633d9
commit
784b34100f
|
|
@ -65,8 +65,8 @@ static void xe_devcoredump_deferred_snap_work(struct work_struct *work)
|
|||
struct xe_devcoredump_snapshot *ss = container_of(work, typeof(*ss), work);
|
||||
|
||||
xe_force_wake_get(gt_to_fw(ss->gt), XE_FORCEWAKE_ALL);
|
||||
if (ss->vm)
|
||||
xe_vm_snapshot_capture_delayed(ss->vm);
|
||||
xe_vm_snapshot_capture_delayed(ss->vm);
|
||||
xe_guc_exec_queue_snapshot_capture_delayed(ss->ge);
|
||||
xe_force_wake_put(gt_to_fw(ss->gt), XE_FORCEWAKE_ALL);
|
||||
}
|
||||
|
||||
|
|
@ -196,8 +196,7 @@ static void devcoredump_snapshot(struct xe_devcoredump *coredump,
|
|||
coredump->snapshot.hwe[id] = xe_hw_engine_snapshot_capture(hwe);
|
||||
}
|
||||
|
||||
if (ss->vm)
|
||||
queue_work(system_unbound_wq, &ss->work);
|
||||
queue_work(system_unbound_wq, &ss->work);
|
||||
|
||||
xe_force_wake_put(gt_to_fw(q->gt), XE_FORCEWAKE_ALL);
|
||||
dma_fence_end_signalling(cookie);
|
||||
|
|
|
|||
|
|
@ -1865,6 +1865,24 @@ xe_guc_exec_queue_snapshot_capture(struct xe_sched_job *job)
|
|||
return snapshot;
|
||||
}
|
||||
|
||||
/**
|
||||
* xe_guc_exec_queue_snapshot_capture_delayed - Take delayed part of snapshot of the GuC Engine.
|
||||
* @snapshot: Previously captured snapshot of job.
|
||||
*
|
||||
* This captures some data that requires taking some locks, so it cannot be done in signaling path.
|
||||
*/
|
||||
void
|
||||
xe_guc_exec_queue_snapshot_capture_delayed(struct xe_guc_submit_exec_queue_snapshot *snapshot)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (!snapshot || !snapshot->lrc)
|
||||
return;
|
||||
|
||||
for (i = 0; i < snapshot->width; ++i)
|
||||
xe_lrc_snapshot_capture_delayed(snapshot->lrc[i]);
|
||||
}
|
||||
|
||||
/**
|
||||
* xe_guc_exec_queue_snapshot_print - Print out a given GuC Engine snapshot.
|
||||
* @snapshot: GuC Submit Engine snapshot object.
|
||||
|
|
|
|||
|
|
@ -29,6 +29,8 @@ int xe_guc_exec_queue_reset_failure_handler(struct xe_guc *guc, u32 *msg, u32 le
|
|||
struct xe_guc_submit_exec_queue_snapshot *
|
||||
xe_guc_exec_queue_snapshot_capture(struct xe_sched_job *job);
|
||||
void
|
||||
xe_guc_exec_queue_snapshot_capture_delayed(struct xe_guc_submit_exec_queue_snapshot *snapshot);
|
||||
void
|
||||
xe_guc_exec_queue_snapshot_print(struct xe_guc_submit_exec_queue_snapshot *snapshot,
|
||||
struct drm_printer *p);
|
||||
void
|
||||
|
|
|
|||
|
|
@ -1359,6 +1359,14 @@ struct xe_lrc_snapshot *xe_lrc_snapshot_capture(struct xe_lrc *lrc)
|
|||
return snapshot;
|
||||
}
|
||||
|
||||
void xe_lrc_snapshot_capture_delayed(struct xe_lrc_snapshot *snapshot)
|
||||
{
|
||||
if (!snapshot)
|
||||
return;
|
||||
|
||||
/* TODO: Copy status page */
|
||||
}
|
||||
|
||||
void xe_lrc_snapshot_print(struct xe_lrc_snapshot *snapshot, struct drm_printer *p)
|
||||
{
|
||||
if (!snapshot)
|
||||
|
|
|
|||
|
|
@ -56,6 +56,7 @@ void xe_lrc_dump_default(struct drm_printer *p,
|
|||
void xe_lrc_emit_hwe_state_instructions(struct xe_exec_queue *q, struct xe_bb *bb);
|
||||
|
||||
struct xe_lrc_snapshot *xe_lrc_snapshot_capture(struct xe_lrc *lrc);
|
||||
void xe_lrc_snapshot_capture_delayed(struct xe_lrc_snapshot *snapshot);
|
||||
void xe_lrc_snapshot_print(struct xe_lrc_snapshot *snapshot, struct drm_printer *p);
|
||||
void xe_lrc_snapshot_free(struct xe_lrc_snapshot *snapshot);
|
||||
|
||||
|
|
|
|||
|
|
@ -3377,6 +3377,9 @@ struct xe_vm_snapshot *xe_vm_snapshot_capture(struct xe_vm *vm)
|
|||
|
||||
void xe_vm_snapshot_capture_delayed(struct xe_vm_snapshot *snap)
|
||||
{
|
||||
if (!snap)
|
||||
return;
|
||||
|
||||
for (int i = 0; i < snap->num_snaps; i++) {
|
||||
struct xe_bo *bo = snap->snap[i].bo;
|
||||
struct iosys_map src;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user