Lines Matching refs:engine

53 static bool subunits_stuck(struct intel_engine_cs *engine)  in subunits_stuck()  argument
55 struct drm_i915_private *dev_priv = engine->i915; in subunits_stuck()
57 struct intel_instdone *accu_instdone = &engine->hangcheck.instdone; in subunits_stuck()
62 intel_engine_get_instdone(engine, &instdone); in subunits_stuck()
85 head_stuck(struct intel_engine_cs *engine, u64 acthd) in head_stuck() argument
87 if (acthd != engine->hangcheck.acthd) { in head_stuck()
90 memset(&engine->hangcheck.instdone, 0, in head_stuck()
91 sizeof(engine->hangcheck.instdone)); in head_stuck()
96 if (!subunits_stuck(engine)) in head_stuck()
103 engine_stuck(struct intel_engine_cs *engine, u64 acthd) in engine_stuck() argument
108 ha = head_stuck(engine, acthd); in engine_stuck()
112 if (IS_GEN(engine->i915, 2)) in engine_stuck()
120 tmp = ENGINE_READ(engine, RING_CTL); in engine_stuck()
122 intel_gt_handle_error(engine->gt, engine->mask, 0, in engine_stuck()
123 "stuck wait on %s", engine->name); in engine_stuck()
124 ENGINE_WRITE(engine, RING_CTL, tmp); in engine_stuck()
131 static void hangcheck_load_sample(struct intel_engine_cs *engine, in hangcheck_load_sample() argument
134 hc->acthd = intel_engine_get_active_head(engine); in hangcheck_load_sample()
135 hc->ring = ENGINE_READ(engine, RING_START); in hangcheck_load_sample()
136 hc->head = ENGINE_READ(engine, RING_HEAD); in hangcheck_load_sample()
139 static void hangcheck_store_sample(struct intel_engine_cs *engine, in hangcheck_store_sample() argument
142 engine->hangcheck.acthd = hc->acthd; in hangcheck_store_sample()
143 engine->hangcheck.last_ring = hc->ring; in hangcheck_store_sample()
144 engine->hangcheck.last_head = hc->head; in hangcheck_store_sample()
148 hangcheck_get_action(struct intel_engine_cs *engine, in hangcheck_get_action() argument
151 if (intel_engine_is_idle(engine)) in hangcheck_get_action()
154 if (engine->hangcheck.last_ring != hc->ring) in hangcheck_get_action()
157 if (engine->hangcheck.last_head != hc->head) in hangcheck_get_action()
160 return engine_stuck(engine, hc->acthd); in hangcheck_get_action()
163 static void hangcheck_accumulate_sample(struct intel_engine_cs *engine, in hangcheck_accumulate_sample() argument
168 hc->action = hangcheck_get_action(engine, hc); in hangcheck_accumulate_sample()
191 memset(&engine->hangcheck.instdone, 0, in hangcheck_accumulate_sample()
192 sizeof(engine->hangcheck.instdone)); in hangcheck_accumulate_sample()
197 engine->hangcheck.action_timestamp = jiffies; in hangcheck_accumulate_sample()
217 engine->hangcheck.action_timestamp + timeout); in hangcheck_accumulate_sample()
219 engine->hangcheck.action_timestamp + in hangcheck_accumulate_sample()
227 struct intel_engine_cs *engine; in hangcheck_declare_hang() local
239 for_each_engine_masked(engine, gt->i915, hung, tmp) in hangcheck_declare_hang()
241 "%s, ", engine->name); in hangcheck_declare_hang()
260 struct intel_engine_cs *engine; in hangcheck_elapsed() local
283 for_each_engine(engine, gt->i915, id) { in hangcheck_elapsed()
286 intel_engine_signal_breadcrumbs(engine); in hangcheck_elapsed()
288 hangcheck_load_sample(engine, &hc); in hangcheck_elapsed()
289 hangcheck_accumulate_sample(engine, &hc); in hangcheck_elapsed()
290 hangcheck_store_sample(engine, &hc); in hangcheck_elapsed()
293 hung |= engine->mask; in hangcheck_elapsed()
295 stuck |= engine->mask; in hangcheck_elapsed()
299 wedged |= engine->mask; in hangcheck_elapsed()
305 for_each_engine(engine, gt->i915, id) { in hangcheck_elapsed()
306 if (intel_engine_is_idle(engine)) in hangcheck_elapsed()
309 intel_engine_dump(engine, &p, "%s\n", engine->name); in hangcheck_elapsed()
347 void intel_engine_init_hangcheck(struct intel_engine_cs *engine) in intel_engine_init_hangcheck() argument
349 memset(&engine->hangcheck, 0, sizeof(engine->hangcheck)); in intel_engine_init_hangcheck()
350 engine->hangcheck.action_timestamp = jiffies; in intel_engine_init_hangcheck()