Lines Matching full:engine

117 hang_create_request(struct hang *h, struct intel_engine_cs *engine)  in hang_create_request()  argument
170 rq = igt_request_alloc(h->ctx, engine); in hang_create_request()
239 intel_gt_chipset_flush(engine->gt); in hang_create_request()
241 if (rq->engine->emit_init_breadcrumb) { in hang_create_request()
242 err = rq->engine->emit_init_breadcrumb(rq); in hang_create_request()
251 err = rq->engine->emit_bb_start(rq, vma->node.start, PAGE_SIZE, flags); in hang_create_request()
301 struct intel_engine_cs *engine; in igt_hang_sanitycheck() local
312 for_each_engine(engine, gt, id) { in igt_hang_sanitycheck()
316 if (!intel_engine_can_store_dword(engine)) in igt_hang_sanitycheck()
319 rq = hang_create_request(&h, engine); in igt_hang_sanitycheck()
323 engine->name, err); in igt_hang_sanitycheck()
330 intel_gt_chipset_flush(engine->gt); in igt_hang_sanitycheck()
346 engine->name, err); in igt_hang_sanitycheck()
356 static bool wait_for_idle(struct intel_engine_cs *engine) in wait_for_idle() argument
358 return wait_for(intel_engine_is_idle(engine), IGT_IDLE_TIMEOUT) == 0; in wait_for_idle()
365 struct intel_engine_cs *engine; in igt_reset_nop() local
376 for_each_engine(engine, gt, id) { in igt_reset_nop()
380 ce = intel_context_create(engine); in igt_reset_nop()
383 pr_err("[%s] Create context failed: %d!\n", engine->name, err); in igt_reset_nop()
394 engine->name, err); in igt_reset_nop()
409 pr_err("[%s] GT is wedged!\n", engine->name); in igt_reset_nop()
416 engine->name, i915_reset_count(global), reset_count, count); in igt_reset_nop()
423 pr_err("[%s] Flush failed: %d!\n", engine->name, err); in igt_reset_nop()
441 struct intel_engine_cs *engine; in igt_reset_nop_engine() local
444 /* Check that we can engine-reset during non-user portions */ in igt_reset_nop_engine()
449 for_each_engine(engine, gt, id) { in igt_reset_nop_engine()
455 if (intel_engine_uses_guc(engine)) { in igt_reset_nop_engine()
456 /* Engine level resets are triggered by GuC when a hang in igt_reset_nop_engine()
463 ce = intel_context_create(engine); in igt_reset_nop_engine()
465 pr_err("[%s] Create context failed: %pe!\n", engine->name, ce); in igt_reset_nop_engine()
470 reset_engine_count = i915_reset_engine_count(global, engine); in igt_reset_nop_engine()
473 st_engine_heartbeat_disable(engine); in igt_reset_nop_engine()
478 if (!wait_for_idle(engine)) { in igt_reset_nop_engine()
480 engine->name); in igt_reset_nop_engine()
492 intel_engine_dump(engine, &p, in igt_reset_nop_engine()
495 engine->name); in igt_reset_nop_engine()
499 engine->name); in igt_reset_nop_engine()
510 err = intel_engine_reset(engine, NULL); in igt_reset_nop_engine()
513 engine->name, err); in igt_reset_nop_engine()
518 pr_err("Full GPU reset recorded! (engine reset expected)\n"); in igt_reset_nop_engine()
523 if (i915_reset_engine_count(global, engine) != in igt_reset_nop_engine()
525 pr_err("%s engine reset not recorded!\n", in igt_reset_nop_engine()
526 engine->name); in igt_reset_nop_engine()
532 st_engine_heartbeat_enable(engine); in igt_reset_nop_engine()
534 pr_info("%s(%s): %d resets\n", __func__, engine->name, count); in igt_reset_nop_engine()
546 static void force_reset_timeout(struct intel_engine_cs *engine) in force_reset_timeout() argument
548 engine->reset_timeout.probability = 999; in force_reset_timeout()
549 atomic_set(&engine->reset_timeout.times, -1); in force_reset_timeout()
552 static void cancel_reset_timeout(struct intel_engine_cs *engine) in cancel_reset_timeout() argument
554 memset(&engine->reset_timeout, 0, sizeof(engine->reset_timeout)); in cancel_reset_timeout()
560 struct intel_engine_cs *engine; in igt_reset_fail_engine() local
563 /* Check that we can recover from engine-reset failues */ in igt_reset_fail_engine()
568 for_each_engine(engine, gt, id) { in igt_reset_fail_engine()
575 if (intel_engine_uses_guc(engine)) in igt_reset_fail_engine()
578 ce = intel_context_create(engine); in igt_reset_fail_engine()
580 pr_err("[%s] Create context failed: %pe!\n", engine->name, ce); in igt_reset_fail_engine()
584 st_engine_heartbeat_disable(engine); in igt_reset_fail_engine()
587 force_reset_timeout(engine); in igt_reset_fail_engine()
588 err = intel_engine_reset(engine, NULL); in igt_reset_fail_engine()
589 cancel_reset_timeout(engine); in igt_reset_fail_engine()
598 if (!wait_for_idle(engine)) { in igt_reset_fail_engine()
600 engine->name); in igt_reset_fail_engine()
612 intel_engine_dump(engine, &p, in igt_reset_fail_engine()
615 engine->name); in igt_reset_fail_engine()
619 engine->name); in igt_reset_fail_engine()
637 err = intel_engine_reset(engine, NULL); in igt_reset_fail_engine()
640 engine->name, err); in igt_reset_fail_engine()
646 force_reset_timeout(engine); in igt_reset_fail_engine()
647 err = intel_engine_reset(engine, NULL); in igt_reset_fail_engine()
648 cancel_reset_timeout(engine); in igt_reset_fail_engine()
651 engine->name, err); in igt_reset_fail_engine()
663 intel_engine_dump(engine, &p, in igt_reset_fail_engine()
666 engine->name); in igt_reset_fail_engine()
670 engine->name); in igt_reset_fail_engine()
680 pr_info("%s(%s): %d resets\n", __func__, engine->name, count); in igt_reset_fail_engine()
683 st_engine_heartbeat_enable(engine); in igt_reset_fail_engine()
698 struct intel_engine_cs *engine; in __igt_reset_engine() local
703 /* Check that we can issue an engine reset on an idle engine (no-op) */ in __igt_reset_engine()
714 for_each_engine(engine, gt, id) { in __igt_reset_engine()
717 bool using_guc = intel_engine_uses_guc(engine); in __igt_reset_engine()
723 if (active && !intel_engine_can_store_dword(engine)) in __igt_reset_engine()
726 if (!wait_for_idle(engine)) { in __igt_reset_engine()
728 engine->name); in __igt_reset_engine()
734 reset_engine_count = i915_reset_engine_count(global, engine); in __igt_reset_engine()
736 st_engine_heartbeat_disable(engine); in __igt_reset_engine()
744 err = intel_selftest_modify_policy(engine, &saved, in __igt_reset_engine()
747 pr_err("[%s] Modify policy failed: %d!\n", engine->name, err); in __igt_reset_engine()
752 rq = hang_create_request(&h, engine); in __igt_reset_engine()
756 engine->name, err); in __igt_reset_engine()
768 intel_engine_dump(engine, &p, in __igt_reset_engine()
769 "%s\n", engine->name); in __igt_reset_engine()
778 err = intel_engine_reset(engine, NULL); in __igt_reset_engine()
781 engine->name, err); in __igt_reset_engine()
787 /* Ensure the reset happens and kills the engine */ in __igt_reset_engine()
791 engine->name, rq->fence.context, in __igt_reset_engine()
800 pr_err("Full GPU reset recorded! (engine reset expected)\n"); in __igt_reset_engine()
805 /* GuC based resets are not logged per engine */ in __igt_reset_engine()
807 if (i915_reset_engine_count(global, engine) != in __igt_reset_engine()
809 pr_err("%s engine reset not recorded!\n", in __igt_reset_engine()
810 engine->name); in __igt_reset_engine()
819 err2 = intel_selftest_restore_policy(engine, &saved); in __igt_reset_engine()
821 pr_err("[%s] Restore policy failed: %d!\n", engine->name, err); in __igt_reset_engine()
828 st_engine_heartbeat_enable(engine); in __igt_reset_engine()
830 engine->name, count, active ? "active" : "idle"); in __igt_reset_engine()
837 pr_err("[%s] Flush failed: %d!\n", engine->name, err); in __igt_reset_engine()
865 struct intel_engine_cs *engine; member
884 rq->engine->name, in active_request_put()
889 intel_gt_set_wedged(rq->engine->gt); in active_request_put()
902 struct intel_engine_cs *engine = arg->engine; in active_engine() local
909 ce[count] = intel_context_create(engine); in active_engine()
912 pr_err("[%s] Create context #%ld failed: %d!\n", engine->name, count, err); in active_engine()
928 pr_err("[%s] Create request #%d failed: %d!\n", engine->name, idx, err); in active_engine()
935 if (engine->sched_engine->schedule && arg->flags & TEST_PRIORITY) { in active_engine()
940 engine->sched_engine->schedule(rq[idx], &attr); in active_engine()
945 pr_err("[%s] Request put failed: %d!\n", engine->name, err); in active_engine()
956 pr_err("[%s] Request put #%ld failed: %d!\n", engine->name, count, err); in active_engine()
973 struct intel_engine_cs *engine, *other; in __igt_reset_engines() local
978 /* Check that issuing a reset on one engine does not interfere in __igt_reset_engines()
979 * with any other engine. in __igt_reset_engines()
994 for_each_engine(engine, gt, id) { in __igt_reset_engines()
998 bool using_guc = intel_engine_uses_guc(engine); in __igt_reset_engines()
1002 if (!intel_engine_can_store_dword(engine)) in __igt_reset_engines()
1007 if (!wait_for_idle(engine)) { in __igt_reset_engines()
1009 engine->name, test_name); in __igt_reset_engines()
1021 if (other == engine && !(flags & TEST_SELF)) in __igt_reset_engines()
1024 if (other != engine && !(flags & TEST_OTHERS)) in __igt_reset_engines()
1027 threads[tmp].engine = other; in __igt_reset_engines()
1034 pr_err("[%s] Thread spawn failed: %d!\n", engine->name, err); in __igt_reset_engines()
1044 st_engine_heartbeat_disable_no_pm(engine); in __igt_reset_engines()
1051 err = intel_selftest_modify_policy(engine, &saved, in __igt_reset_engines()
1054 pr_err("[%s] Modify policy failed: %d!\n", engine->name, err); in __igt_reset_engines()
1059 rq = hang_create_request(&h, engine); in __igt_reset_engines()
1063 engine->name, err); in __igt_reset_engines()
1075 intel_engine_dump(engine, &p, in __igt_reset_engines()
1076 "%s\n", engine->name); in __igt_reset_engines()
1083 intel_engine_pm_get(engine); in __igt_reset_engines()
1087 err = intel_engine_reset(engine, NULL); in __igt_reset_engines()
1090 engine->name, test_name, err); in __igt_reset_engines()
1096 /* Ensure the reset happens and kills the engine */ in __igt_reset_engines()
1100 engine->name, rq->fence.context, in __igt_reset_engines()
1109 engine->name, test_name, in __igt_reset_engines()
1126 engine->name, test_name, in __igt_reset_engines()
1129 intel_engine_dump(engine, &p, in __igt_reset_engines()
1130 "%s\n", engine->name); in __igt_reset_engines()
1143 intel_engine_pm_put(engine); in __igt_reset_engines()
1145 if (!(flags & TEST_SELF) && !wait_for_idle(engine)) { in __igt_reset_engines()
1151 engine->name, test_name); in __igt_reset_engines()
1152 intel_engine_dump(engine, &p, in __igt_reset_engines()
1153 "%s\n", engine->name); in __igt_reset_engines()
1160 err2 = intel_selftest_restore_policy(engine, &saved); in __igt_reset_engines()
1162 pr_err("[%s] Restore policy failed: %d!\n", engine->name, err2); in __igt_reset_engines()
1169 st_engine_heartbeat_enable_no_pm(engine); in __igt_reset_engines()
1172 engine->name, test_name, count); in __igt_reset_engines()
1174 /* GuC based resets are not logged per engine */ in __igt_reset_engines()
1176 reported = i915_reset_engine_count(global, engine); in __igt_reset_engines()
1177 reported -= threads[engine->id].resets; in __igt_reset_engines()
1180 engine->name, test_name, count, reported); in __igt_reset_engines()
1195 pr_err("kthread for other engine %s failed, err=%d\n", in __igt_reset_engines()
1202 /* GuC based resets are not logged per engine */ in __igt_reset_engines()
1204 if (other->uabi_class != engine->uabi_class && in __igt_reset_engines()
1207 pr_err("Innocent engine %s was reset (count=%ld)\n", in __igt_reset_engines()
1229 pr_err("[%s] Flush failed: %d!\n", engine->name, err); in __igt_reset_engines()
1294 struct intel_engine_cs *engine = gt->engine[RCS0]; in igt_reset_wait() local
1301 if (!engine || !intel_engine_can_store_dword(engine)) in igt_reset_wait()
1310 pr_err("[%s] Hang init failed: %d!\n", engine->name, err); in igt_reset_wait()
1314 rq = hang_create_request(&h, engine); in igt_reset_wait()
1317 pr_err("[%s] Create hang request failed: %d!\n", engine->name, err); in igt_reset_wait()
1329 intel_engine_dump(rq->engine, &p, "%s\n", rq->engine->name); in igt_reset_wait()
1424 struct intel_engine_cs *engine = gt->engine[RCS0]; in __igt_reset_evict_vma() local
1436 if (!engine || !intel_engine_can_store_dword(engine)) in __igt_reset_evict_vma()
1443 pr_err("[%s] Hang init failed: %d!\n", engine->name, err); in __igt_reset_evict_vma()
1450 pr_err("[%s] Create object failed: %d!\n", engine->name, err); in __igt_reset_evict_vma()
1465 pr_err("[%s] VMA instance failed: %d!\n", engine->name, err); in __igt_reset_evict_vma()
1469 rq = hang_create_request(&h, engine); in __igt_reset_evict_vma()
1472 pr_err("[%s] Create hang request failed: %d!\n", engine->name, err); in __igt_reset_evict_vma()
1484 pr_err("[%s] VMA pin failed: %d!\n", engine->name, err); in __igt_reset_evict_vma()
1504 pr_err("[%s] Move to active failed: %d!\n", engine->name, err); in __igt_reset_evict_vma()
1506 pr_err("[%s] Request await failed: %d!\n", engine->name, err); in __igt_reset_evict_vma()
1525 intel_engine_dump(rq->engine, &p, "%s\n", rq->engine->name); in __igt_reset_evict_vma()
1536 pr_err("[%s] Thread spawn failed: %d!\n", engine->name, err); in __igt_reset_evict_vma()
1548 intel_engine_dump(rq->engine, &p, "%s\n", rq->engine->name); in __igt_reset_evict_vma()
1556 fake_hangcheck(gt, rq->engine->mask); in __igt_reset_evict_vma()
1621 struct intel_engine_cs *engine; in wait_for_others() local
1624 for_each_engine(engine, gt, id) { in wait_for_others()
1625 if (engine == exclude) in wait_for_others()
1628 if (!wait_for_idle(engine)) in wait_for_others()
1639 struct intel_engine_cs *engine; in igt_reset_queue() local
1652 for_each_engine(engine, gt, id) { in igt_reset_queue()
1657 bool using_guc = intel_engine_uses_guc(engine); in igt_reset_queue()
1659 if (!intel_engine_can_store_dword(engine)) in igt_reset_queue()
1663 err = intel_selftest_modify_policy(engine, &saved, in igt_reset_queue()
1666 pr_err("[%s] Modify policy failed: %d!\n", engine->name, err); in igt_reset_queue()
1671 prev = hang_create_request(&h, engine); in igt_reset_queue()
1674 pr_err("[%s] Create 'prev' hang request failed: %d!\n", engine->name, err); in igt_reset_queue()
1686 rq = hang_create_request(&h, engine); in igt_reset_queue()
1689 pr_err("[%s] Create hang request failed: %d!\n", engine->name, err); in igt_reset_queue()
1704 * engine and so avoid repeatedly resetting innocents. in igt_reset_queue()
1706 err = wait_for_others(gt, engine); in igt_reset_queue()
1709 __func__, engine->name); in igt_reset_queue()
1722 __func__, engine->name, in igt_reset_queue()
1724 intel_engine_dump(engine, &p, in igt_reset_queue()
1725 "%s\n", engine->name); in igt_reset_queue()
1769 engine->name, count); in igt_reset_queue()
1772 intel_gt_chipset_flush(engine->gt); in igt_reset_queue()
1778 int err2 = intel_selftest_restore_policy(engine, &saved); in igt_reset_queue()
1782 __func__, __LINE__, engine->name, err2); in igt_reset_queue()
1791 pr_err("[%s] Flush failed: %d!\n", engine->name, err); in igt_reset_queue()
1811 struct intel_engine_cs *engine = gt->engine[RCS0]; in igt_handle_error() local
1817 /* Check that we can issue a global GPU and engine reset */ in igt_handle_error()
1822 if (!engine || !intel_engine_can_store_dword(engine)) in igt_handle_error()
1827 pr_err("[%s] Hang init failed: %d!\n", engine->name, err); in igt_handle_error()
1831 rq = hang_create_request(&h, engine); in igt_handle_error()
1834 pr_err("[%s] Create hang request failed: %d!\n", engine->name, err); in igt_handle_error()
1846 intel_engine_dump(rq->engine, &p, "%s\n", rq->engine->name); in igt_handle_error()
1857 intel_gt_handle_error(gt, engine->mask, 0, NULL); in igt_handle_error()
1874 static int __igt_atomic_reset_engine(struct intel_engine_cs *engine, in __igt_atomic_reset_engine() argument
1878 struct tasklet_struct * const t = &engine->sched_engine->tasklet; in __igt_atomic_reset_engine()
1882 engine->name, mode, p->name); in __igt_atomic_reset_engine()
1890 err = __intel_engine_reset_bh(engine, NULL); in __igt_atomic_reset_engine()
1902 engine->name, mode, p->name); in __igt_atomic_reset_engine()
1907 static int igt_atomic_reset_engine(struct intel_engine_cs *engine, in igt_atomic_reset_engine() argument
1914 err = __igt_atomic_reset_engine(engine, p, "idle"); in igt_atomic_reset_engine()
1918 err = hang_init(&h, engine->gt); in igt_atomic_reset_engine()
1920 pr_err("[%s] Hang init failed: %d!\n", engine->name, err); in igt_atomic_reset_engine()
1924 rq = hang_create_request(&h, engine); in igt_atomic_reset_engine()
1927 pr_err("[%s] Create hang request failed: %d!\n", engine->name, err); in igt_atomic_reset_engine()
1935 err = __igt_atomic_reset_engine(engine, p, "active"); in igt_atomic_reset_engine()
1938 __func__, engine->name, in igt_atomic_reset_engine()
1940 intel_gt_set_wedged(engine->gt); in igt_atomic_reset_engine()
1947 intel_wedge_on_timeout(&w, engine->gt, HZ / 20 /* 50ms */) in igt_atomic_reset_engine()
1949 if (intel_gt_is_wedged(engine->gt)) in igt_atomic_reset_engine()
1980 struct intel_engine_cs *engine; in igt_reset_engines_atomic() local
1983 for_each_engine(engine, gt, id) { in igt_reset_engines_atomic()
1984 err = igt_atomic_reset_engine(engine, p); in igt_reset_engines_atomic()