Lines Matching full:dead
204 cancel_work_sync(&ct->dead.worker); in guc_ct_fini()
238 spin_lock_init(&ct->dead.lock); in xe_guc_ct_init_noalloc()
239 INIT_WORK(&ct->dead.worker, ct_dead_worker_func); in xe_guc_ct_init_noalloc()
544 * after any existing dead state has been dumped. in xe_guc_ct_enable()
546 spin_lock_irq(&ct->dead.lock); in xe_guc_ct_enable()
547 if (ct->dead.reason) { in xe_guc_ct_enable()
548 ct->dead.reason |= (1 << CT_DEAD_STATE_REARM); in xe_guc_ct_enable()
549 queue_work(system_unbound_wq, &ct->dead.worker); in xe_guc_ct_enable()
551 spin_unlock_irq(&ct->dead.lock); in xe_guc_ct_enable()
2161 if (ct->dead.reported) in ct_dead_capture()
2164 spin_lock_irqsave(&ct->dead.lock, flags); in ct_dead_capture()
2167 have_capture = ct->dead.reason & (1 << CT_DEAD_STATE_CAPTURE); in ct_dead_capture()
2168 ct->dead.reason |= (1 << reason_code) | in ct_dead_capture()
2171 spin_unlock_irqrestore(&ct->dead.lock, flags); in ct_dead_capture()
2179 spin_lock_irqsave(&ct->dead.lock, flags); in ct_dead_capture()
2181 if (ct->dead.snapshot_log || ct->dead.snapshot_ct) { in ct_dead_capture()
2182 xe_gt_err(ct_to_gt(ct), "Got unexpected dead CT capture!\n"); in ct_dead_capture()
2186 ct->dead.snapshot_log = snapshot_log; in ct_dead_capture()
2187 ct->dead.snapshot_ct = snapshot_ct; in ct_dead_capture()
2190 spin_unlock_irqrestore(&ct->dead.lock, flags); in ct_dead_capture()
2192 queue_work(system_unbound_wq, &(ct)->dead.worker); in ct_dead_capture()
2195 static void ct_dead_print(struct xe_dead_ct *dead) in ct_dead_print() argument
2197 struct xe_guc_ct *ct = container_of(dead, struct xe_guc_ct, dead); in ct_dead_print()
2204 if (!dead->reason) { in ct_dead_print()
2205 xe_gt_err(gt, "CTB is dead for no reason!?\n"); in ct_dead_print()
2211 drm_printf(&lp, "Reason: CTB is dead - 0x%X\n", dead->reason); in ct_dead_print()
2218 xe_guc_log_snapshot_print(dead->snapshot_log, &lp); in ct_dead_print()
2221 xe_guc_ct_snapshot_print(dead->snapshot_ct, &lp); in ct_dead_print()
2228 struct xe_guc_ct *ct = container_of(w, struct xe_guc_ct, dead.worker); in ct_dead_worker_func()
2230 if (!ct->dead.reported) { in ct_dead_worker_func()
2231 ct->dead.reported = true; in ct_dead_worker_func()
2232 ct_dead_print(&ct->dead); in ct_dead_worker_func()
2235 spin_lock_irq(&ct->dead.lock); in ct_dead_worker_func()
2237 xe_guc_log_snapshot_free(ct->dead.snapshot_log); in ct_dead_worker_func()
2238 ct->dead.snapshot_log = NULL; in ct_dead_worker_func()
2239 xe_guc_ct_snapshot_free(ct->dead.snapshot_ct); in ct_dead_worker_func()
2240 ct->dead.snapshot_ct = NULL; in ct_dead_worker_func()
2242 if (ct->dead.reason & (1 << CT_DEAD_STATE_REARM)) { in ct_dead_worker_func()
2244 ct->dead.reason = 0; in ct_dead_worker_func()
2245 ct->dead.reported = false; in ct_dead_worker_func()
2248 spin_unlock_irq(&ct->dead.lock); in ct_dead_worker_func()