Lines Matching refs:ss
88 struct xe_devcoredump_snapshot *ss; in __xe_devcoredump_read() local
95 ss = &coredump->snapshot; in __xe_devcoredump_read()
104 drm_printf(&p, "Reason: %s\n", ss->reason); in __xe_devcoredump_read()
108 ts = ktime_to_timespec64(ss->snapshot_time); in __xe_devcoredump_read()
110 ts = ktime_to_timespec64(ss->boot_time); in __xe_devcoredump_read()
112 drm_printf(&p, "Process: %s [%d]\n", ss->process_name, ss->pid); in __xe_devcoredump_read()
115 drm_printf(&p, "\n**** GT #%d ****\n", ss->gt->info.id); in __xe_devcoredump_read()
116 drm_printf(&p, "\tTile: %d\n", ss->gt->tile->id); in __xe_devcoredump_read()
119 xe_guc_log_snapshot_print(ss->guc.log, &p); in __xe_devcoredump_read()
121 xe_guc_ct_snapshot_print(ss->guc.ct, &p); in __xe_devcoredump_read()
124 xe_guc_exec_queue_snapshot_print(ss->ge, &p); in __xe_devcoredump_read()
127 xe_sched_job_snapshot_print(ss->job, &p); in __xe_devcoredump_read()
131 if (ss->hwe[i]) in __xe_devcoredump_read()
132 xe_engine_snapshot_print(ss->hwe[i], &p); in __xe_devcoredump_read()
135 xe_vm_snapshot_print(ss->vm, &p); in __xe_devcoredump_read()
140 static void xe_devcoredump_snapshot_free(struct xe_devcoredump_snapshot *ss) in xe_devcoredump_snapshot_free() argument
144 kfree(ss->reason); in xe_devcoredump_snapshot_free()
145 ss->reason = NULL; in xe_devcoredump_snapshot_free()
147 xe_guc_log_snapshot_free(ss->guc.log); in xe_devcoredump_snapshot_free()
148 ss->guc.log = NULL; in xe_devcoredump_snapshot_free()
150 xe_guc_ct_snapshot_free(ss->guc.ct); in xe_devcoredump_snapshot_free()
151 ss->guc.ct = NULL; in xe_devcoredump_snapshot_free()
153 xe_guc_capture_put_matched_nodes(&ss->gt->uc.guc); in xe_devcoredump_snapshot_free()
154 ss->matched_node = NULL; in xe_devcoredump_snapshot_free()
156 xe_guc_exec_queue_snapshot_free(ss->ge); in xe_devcoredump_snapshot_free()
157 ss->ge = NULL; in xe_devcoredump_snapshot_free()
159 xe_sched_job_snapshot_free(ss->job); in xe_devcoredump_snapshot_free()
160 ss->job = NULL; in xe_devcoredump_snapshot_free()
163 if (ss->hwe[i]) { in xe_devcoredump_snapshot_free()
164 xe_hw_engine_snapshot_free(ss->hwe[i]); in xe_devcoredump_snapshot_free()
165 ss->hwe[i] = NULL; in xe_devcoredump_snapshot_free()
168 xe_vm_snapshot_free(ss->vm); in xe_devcoredump_snapshot_free()
169 ss->vm = NULL; in xe_devcoredump_snapshot_free()
194 struct xe_devcoredump_snapshot *ss; in xe_devcoredump_read() local
204 ss = &coredump->snapshot; in xe_devcoredump_read()
207 flush_work(&ss->work); in xe_devcoredump_read()
209 pm_needed = ss->read.size > XE_DEVCOREDUMP_CHUNK_MAX; in xe_devcoredump_read()
211 xe_pm_runtime_get(gt_to_xe(ss->gt)); in xe_devcoredump_read()
215 if (!ss->read.buffer) { in xe_devcoredump_read()
220 if (offset >= ss->read.size) in xe_devcoredump_read()
227 if (offset >= ss->read.chunk_position + XE_DEVCOREDUMP_CHUNK_MAX || in xe_devcoredump_read()
228 offset < ss->read.chunk_position) { in xe_devcoredump_read()
229 ss->read.chunk_position = new_chunk_position * in xe_devcoredump_read()
232 __xe_devcoredump_read(ss->read.buffer, in xe_devcoredump_read()
234 ss->read.chunk_position, coredump); in xe_devcoredump_read()
237 byte_copied = count < ss->read.size - offset ? count : in xe_devcoredump_read()
238 ss->read.size - offset; in xe_devcoredump_read()
239 memcpy(buffer, ss->read.buffer + chunk_offset, byte_copied); in xe_devcoredump_read()
245 xe_pm_runtime_put(gt_to_xe(ss->gt)); in xe_devcoredump_read()
276 struct xe_devcoredump_snapshot *ss = container_of(work, typeof(*ss), work); in xe_devcoredump_deferred_snap_work() local
277 struct xe_devcoredump *coredump = container_of(ss, typeof(*coredump), snapshot); in xe_devcoredump_deferred_snap_work()
286 dev_coredumpm_timeout(gt_to_xe(ss->gt)->drm.dev, THIS_MODULE, coredump, 0, GFP_KERNEL, in xe_devcoredump_deferred_snap_work()
293 fw_ref = xe_force_wake_get(gt_to_fw(ss->gt), XE_FORCEWAKE_ALL); in xe_devcoredump_deferred_snap_work()
295 xe_gt_info(ss->gt, "failed to get forcewake for coredump capture\n"); in xe_devcoredump_deferred_snap_work()
296 xe_vm_snapshot_capture_delayed(ss->vm); in xe_devcoredump_deferred_snap_work()
297 xe_guc_exec_queue_snapshot_capture_delayed(ss->ge); in xe_devcoredump_deferred_snap_work()
298 xe_force_wake_put(gt_to_fw(ss->gt), fw_ref); in xe_devcoredump_deferred_snap_work()
300 ss->read.chunk_position = 0; in xe_devcoredump_deferred_snap_work()
303 ss->read.size = __xe_devcoredump_read(NULL, LONG_MAX, 0, coredump); in xe_devcoredump_deferred_snap_work()
305 if (ss->read.size > XE_DEVCOREDUMP_CHUNK_MAX) { in xe_devcoredump_deferred_snap_work()
306 ss->read.buffer = kvmalloc(XE_DEVCOREDUMP_CHUNK_MAX, in xe_devcoredump_deferred_snap_work()
308 if (!ss->read.buffer) in xe_devcoredump_deferred_snap_work()
311 __xe_devcoredump_read(ss->read.buffer, in xe_devcoredump_deferred_snap_work()
315 ss->read.buffer = kvmalloc(ss->read.size, GFP_USER); in xe_devcoredump_deferred_snap_work()
316 if (!ss->read.buffer) in xe_devcoredump_deferred_snap_work()
319 __xe_devcoredump_read(ss->read.buffer, ss->read.size, 0, in xe_devcoredump_deferred_snap_work()
321 xe_devcoredump_snapshot_free(ss); in xe_devcoredump_deferred_snap_work()
332 struct xe_devcoredump_snapshot *ss = &coredump->snapshot; in devcoredump_snapshot() local
338 ss->snapshot_time = ktime_get_real(); in devcoredump_snapshot()
339 ss->boot_time = ktime_get_boottime(); in devcoredump_snapshot()
343 ss->pid = q->vm->xef->pid; in devcoredump_snapshot()
346 strscpy(ss->process_name, process_name); in devcoredump_snapshot()
348 ss->gt = q->gt; in devcoredump_snapshot()
349 INIT_WORK(&ss->work, xe_devcoredump_deferred_snap_work); in devcoredump_snapshot()
356 ss->guc.log = xe_guc_log_snapshot_capture(&guc->log, true); in devcoredump_snapshot()
357 ss->guc.ct = xe_guc_ct_snapshot_capture(&guc->ct); in devcoredump_snapshot()
358 ss->ge = xe_guc_exec_queue_snapshot_capture(q); in devcoredump_snapshot()
360 ss->job = xe_sched_job_snapshot_capture(job); in devcoredump_snapshot()
361 ss->vm = xe_vm_snapshot_capture(q->vm); in devcoredump_snapshot()
365 queue_work(system_unbound_wq, &ss->work); in devcoredump_snapshot()