Lines Matching full:engine
119 hang_create_request(struct hang *h, struct intel_engine_cs *engine) in hang_create_request() argument
172 rq = igt_request_alloc(h->ctx, engine); in hang_create_request()
241 intel_gt_chipset_flush(engine->gt); in hang_create_request()
243 if (rq->engine->emit_init_breadcrumb) { in hang_create_request()
244 err = rq->engine->emit_init_breadcrumb(rq); in hang_create_request()
253 err = rq->engine->emit_bb_start(rq, vma->node.start, PAGE_SIZE, flags); in hang_create_request()
303 struct intel_engine_cs *engine; in igt_hang_sanitycheck() local
314 for_each_engine(engine, gt, id) { in igt_hang_sanitycheck()
318 if (!intel_engine_can_store_dword(engine)) in igt_hang_sanitycheck()
321 rq = hang_create_request(&h, engine); in igt_hang_sanitycheck()
325 engine->name, err); in igt_hang_sanitycheck()
332 intel_gt_chipset_flush(engine->gt); in igt_hang_sanitycheck()
348 engine->name, err); in igt_hang_sanitycheck()
358 static bool wait_for_idle(struct intel_engine_cs *engine) in wait_for_idle() argument
360 return wait_for(intel_engine_is_idle(engine), IGT_IDLE_TIMEOUT) == 0; in wait_for_idle()
367 struct intel_engine_cs *engine; in igt_reset_nop() local
378 for_each_engine(engine, gt, id) { in igt_reset_nop()
382 ce = intel_context_create(engine); in igt_reset_nop()
385 pr_err("[%s] Create context failed: %d!\n", engine->name, err); in igt_reset_nop()
396 engine->name, err); in igt_reset_nop()
411 pr_err("[%s] GT is wedged!\n", engine->name); in igt_reset_nop()
418 engine->name, i915_reset_count(global), reset_count, count); in igt_reset_nop()
425 pr_err("[%s] Flush failed: %d!\n", engine->name, err); in igt_reset_nop()
443 struct intel_engine_cs *engine; in igt_reset_nop_engine() local
446 /* Check that we can engine-reset during non-user portions */ in igt_reset_nop_engine()
451 for_each_engine(engine, gt, id) { in igt_reset_nop_engine()
457 if (intel_engine_uses_guc(engine)) { in igt_reset_nop_engine()
458 /* Engine level resets are triggered by GuC when a hang in igt_reset_nop_engine()
465 ce = intel_context_create(engine); in igt_reset_nop_engine()
467 pr_err("[%s] Create context failed: %pe!\n", engine->name, ce); in igt_reset_nop_engine()
472 reset_engine_count = i915_reset_engine_count(global, engine); in igt_reset_nop_engine()
475 st_engine_heartbeat_disable(engine); in igt_reset_nop_engine()
481 if (!wait_for_idle(engine)) { in igt_reset_nop_engine()
483 engine->name); in igt_reset_nop_engine()
495 intel_engine_dump(engine, &p, in igt_reset_nop_engine()
498 engine->name); in igt_reset_nop_engine()
502 engine->name); in igt_reset_nop_engine()
513 err = intel_engine_reset(engine, NULL); in igt_reset_nop_engine()
516 engine->name, err); in igt_reset_nop_engine()
521 pr_err("Full GPU reset recorded! (engine reset expected)\n"); in igt_reset_nop_engine()
526 if (i915_reset_engine_count(global, engine) != in igt_reset_nop_engine()
528 pr_err("%s engine reset not recorded!\n", in igt_reset_nop_engine()
529 engine->name); in igt_reset_nop_engine()
535 st_engine_heartbeat_enable(engine); in igt_reset_nop_engine()
537 pr_info("%s(%s): %d resets\n", __func__, engine->name, count); in igt_reset_nop_engine()
549 static void force_reset_timeout(struct intel_engine_cs *engine) in force_reset_timeout() argument
551 engine->reset_timeout.probability = 999; in force_reset_timeout()
552 atomic_set(&engine->reset_timeout.times, -1); in force_reset_timeout()
555 static void cancel_reset_timeout(struct intel_engine_cs *engine) in cancel_reset_timeout() argument
557 memset(&engine->reset_timeout, 0, sizeof(engine->reset_timeout)); in cancel_reset_timeout()
563 struct intel_engine_cs *engine; in igt_reset_fail_engine() local
566 /* Check that we can recover from engine-reset failues */ in igt_reset_fail_engine()
571 for_each_engine(engine, gt, id) { in igt_reset_fail_engine()
578 if (intel_engine_uses_guc(engine)) in igt_reset_fail_engine()
581 ce = intel_context_create(engine); in igt_reset_fail_engine()
583 pr_err("[%s] Create context failed: %pe!\n", engine->name, ce); in igt_reset_fail_engine()
587 st_engine_heartbeat_disable(engine); in igt_reset_fail_engine()
591 force_reset_timeout(engine); in igt_reset_fail_engine()
592 err = intel_engine_reset(engine, NULL); in igt_reset_fail_engine()
593 cancel_reset_timeout(engine); in igt_reset_fail_engine()
602 if (!wait_for_idle(engine)) { in igt_reset_fail_engine()
604 engine->name); in igt_reset_fail_engine()
616 intel_engine_dump(engine, &p, in igt_reset_fail_engine()
619 engine->name); in igt_reset_fail_engine()
623 engine->name); in igt_reset_fail_engine()
641 err = intel_engine_reset(engine, NULL); in igt_reset_fail_engine()
644 engine->name, err); in igt_reset_fail_engine()
650 force_reset_timeout(engine); in igt_reset_fail_engine()
651 err = intel_engine_reset(engine, NULL); in igt_reset_fail_engine()
652 cancel_reset_timeout(engine); in igt_reset_fail_engine()
655 engine->name, err); in igt_reset_fail_engine()
667 intel_engine_dump(engine, &p, in igt_reset_fail_engine()
670 engine->name); in igt_reset_fail_engine()
674 engine->name); in igt_reset_fail_engine()
684 pr_info("%s(%s): %d resets\n", __func__, engine->name, count); in igt_reset_fail_engine()
687 st_engine_heartbeat_enable(engine); in igt_reset_fail_engine()
702 struct intel_engine_cs *engine; in __igt_reset_engine() local
707 /* Check that we can issue an engine reset on an idle engine (no-op) */ in __igt_reset_engine()
718 for_each_engine(engine, gt, id) { in __igt_reset_engine()
721 bool using_guc = intel_engine_uses_guc(engine); in __igt_reset_engine()
727 if (active && !intel_engine_can_store_dword(engine)) in __igt_reset_engine()
730 if (!wait_for_idle(engine)) { in __igt_reset_engine()
732 engine->name); in __igt_reset_engine()
738 reset_engine_count = i915_reset_engine_count(global, engine); in __igt_reset_engine()
740 st_engine_heartbeat_disable(engine); in __igt_reset_engine()
749 err = intel_selftest_modify_policy(engine, &saved, in __igt_reset_engine()
752 pr_err("[%s] Modify policy failed: %d!\n", engine->name, err); in __igt_reset_engine()
757 rq = hang_create_request(&h, engine); in __igt_reset_engine()
761 engine->name, err); in __igt_reset_engine()
773 intel_engine_dump(engine, &p, in __igt_reset_engine()
774 "%s\n", engine->name); in __igt_reset_engine()
783 err = intel_engine_reset(engine, NULL); in __igt_reset_engine()
786 engine->name, err); in __igt_reset_engine()
792 /* Ensure the reset happens and kills the engine */ in __igt_reset_engine()
796 engine->name, rq->fence.context, in __igt_reset_engine()
805 pr_err("Full GPU reset recorded! (engine reset expected)\n"); in __igt_reset_engine()
810 /* GuC based resets are not logged per engine */ in __igt_reset_engine()
812 if (i915_reset_engine_count(global, engine) != in __igt_reset_engine()
814 pr_err("%s engine reset not recorded!\n", in __igt_reset_engine()
815 engine->name); in __igt_reset_engine()
824 err2 = intel_selftest_restore_policy(engine, &saved); in __igt_reset_engine()
826 pr_err("[%s] Restore policy failed: %d!\n", engine->name, err); in __igt_reset_engine()
833 st_engine_heartbeat_enable(engine); in __igt_reset_engine()
835 engine->name, count, active ? "active" : "idle"); in __igt_reset_engine()
842 pr_err("[%s] Flush failed: %d!\n", engine->name, err); in __igt_reset_engine()
870 struct intel_engine_cs *engine; member
889 rq->engine->name, in active_request_put()
894 intel_gt_set_wedged(rq->engine->gt); in active_request_put()
907 struct intel_engine_cs *engine = arg->engine; in active_engine() local
914 ce[count] = intel_context_create(engine); in active_engine()
917 pr_err("[%s] Create context #%ld failed: %d!\n", engine->name, count, err); in active_engine()
933 pr_err("[%s] Create request #%d failed: %d!\n", engine->name, idx, err); in active_engine()
940 if (engine->sched_engine->schedule && arg->flags & TEST_PRIORITY) { in active_engine()
945 engine->sched_engine->schedule(rq[idx], &attr); in active_engine()
950 pr_err("[%s] Request put failed: %d!\n", engine->name, err); in active_engine()
961 pr_err("[%s] Request put #%ld failed: %d!\n", engine->name, count, err); in active_engine()
978 struct intel_engine_cs *engine, *other; in __igt_reset_engines() local
984 /* Check that issuing a reset on one engine does not interfere in __igt_reset_engines()
985 * with any other engine. in __igt_reset_engines()
1004 for_each_engine(engine, gt, id) { in __igt_reset_engines()
1007 bool using_guc = intel_engine_uses_guc(engine); in __igt_reset_engines()
1011 if (!intel_engine_can_store_dword(engine)) in __igt_reset_engines()
1016 if (!wait_for_idle(engine)) { in __igt_reset_engines()
1018 engine->name, test_name); in __igt_reset_engines()
1030 if (other == engine && !(flags & TEST_SELF)) in __igt_reset_engines()
1033 if (other != engine && !(flags & TEST_OTHERS)) in __igt_reset_engines()
1036 threads[tmp].engine = other; in __igt_reset_engines()
1043 pr_err("[%s] Thread spawn failed: %d!\n", engine->name, err); in __igt_reset_engines()
1053 st_engine_heartbeat_disable_no_pm(engine); in __igt_reset_engines()
1061 err = intel_selftest_modify_policy(engine, &saved, in __igt_reset_engines()
1064 pr_err("[%s] Modify policy failed: %d!\n", engine->name, err); in __igt_reset_engines()
1069 rq = hang_create_request(&h, engine); in __igt_reset_engines()
1073 engine->name, err); in __igt_reset_engines()
1085 intel_engine_dump(engine, &p, in __igt_reset_engines()
1086 "%s\n", engine->name); in __igt_reset_engines()
1093 intel_engine_pm_get(engine); in __igt_reset_engines()
1097 err = intel_engine_reset(engine, NULL); in __igt_reset_engines()
1100 engine->name, test_name, err); in __igt_reset_engines()
1106 /* Ensure the reset happens and kills the engine */ in __igt_reset_engines()
1110 engine->name, rq->fence.context, in __igt_reset_engines()
1119 engine->name, test_name, in __igt_reset_engines()
1136 engine->name, test_name, in __igt_reset_engines()
1139 intel_engine_dump(engine, &p, in __igt_reset_engines()
1140 "%s\n", engine->name); in __igt_reset_engines()
1153 intel_engine_pm_put(engine); in __igt_reset_engines()
1155 if (!(flags & TEST_SELF) && !wait_for_idle(engine)) { in __igt_reset_engines()
1161 engine->name, test_name); in __igt_reset_engines()
1162 intel_engine_dump(engine, &p, in __igt_reset_engines()
1163 "%s\n", engine->name); in __igt_reset_engines()
1170 err2 = intel_selftest_restore_policy(engine, &saved); in __igt_reset_engines()
1172 pr_err("[%s] Restore policy failed: %d!\n", engine->name, err2); in __igt_reset_engines()
1179 st_engine_heartbeat_enable_no_pm(engine); in __igt_reset_engines()
1182 engine->name, test_name, count); in __igt_reset_engines()
1184 /* GuC based resets are not logged per engine */ in __igt_reset_engines()
1186 reported = i915_reset_engine_count(global, engine); in __igt_reset_engines()
1187 reported -= threads[engine->id].resets; in __igt_reset_engines()
1190 engine->name, test_name, count, reported); in __igt_reset_engines()
1205 pr_err("kthread for other engine %s failed, err=%d\n", in __igt_reset_engines()
1212 /* GuC based resets are not logged per engine */ in __igt_reset_engines()
1214 if (other->uabi_class != engine->uabi_class && in __igt_reset_engines()
1217 pr_err("Innocent engine %s was reset (count=%ld)\n", in __igt_reset_engines()
1239 pr_err("[%s] Flush failed: %d!\n", engine->name, err); in __igt_reset_engines()
1305 struct intel_engine_cs *engine; in igt_reset_wait() local
1312 engine = intel_selftest_find_any_engine(gt); in igt_reset_wait()
1314 if (!engine || !intel_engine_can_store_dword(engine)) in igt_reset_wait()
1323 pr_err("[%s] Hang init failed: %d!\n", engine->name, err); in igt_reset_wait()
1327 rq = hang_create_request(&h, engine); in igt_reset_wait()
1330 pr_err("[%s] Create hang request failed: %d!\n", engine->name, err); in igt_reset_wait()
1342 intel_engine_dump(rq->engine, &p, "%s\n", rq->engine->name); in igt_reset_wait()
1437 struct intel_engine_cs *engine; in __igt_reset_evict_vma() local
1449 engine = intel_selftest_find_any_engine(gt); in __igt_reset_evict_vma()
1451 if (!engine || !intel_engine_can_store_dword(engine)) in __igt_reset_evict_vma()
1458 pr_err("[%s] Hang init failed: %d!\n", engine->name, err); in __igt_reset_evict_vma()
1465 pr_err("[%s] Create object failed: %d!\n", engine->name, err); in __igt_reset_evict_vma()
1480 pr_err("[%s] VMA instance failed: %d!\n", engine->name, err); in __igt_reset_evict_vma()
1484 rq = hang_create_request(&h, engine); in __igt_reset_evict_vma()
1487 pr_err("[%s] Create hang request failed: %d!\n", engine->name, err); in __igt_reset_evict_vma()
1499 pr_err("[%s] VMA pin failed: %d!\n", engine->name, err); in __igt_reset_evict_vma()
1519 pr_err("[%s] Move to active failed: %d!\n", engine->name, err); in __igt_reset_evict_vma()
1521 pr_err("[%s] Request await failed: %d!\n", engine->name, err); in __igt_reset_evict_vma()
1540 intel_engine_dump(rq->engine, &p, "%s\n", rq->engine->name); in __igt_reset_evict_vma()
1551 pr_err("[%s] Thread spawn failed: %d!\n", engine->name, err); in __igt_reset_evict_vma()
1563 intel_engine_dump(rq->engine, &p, "%s\n", rq->engine->name); in __igt_reset_evict_vma()
1571 fake_hangcheck(gt, rq->engine->mask); in __igt_reset_evict_vma()
1636 struct intel_engine_cs *engine; in wait_for_others() local
1639 for_each_engine(engine, gt, id) { in wait_for_others()
1640 if (engine == exclude) in wait_for_others()
1643 if (!wait_for_idle(engine)) in wait_for_others()
1654 struct intel_engine_cs *engine; in igt_reset_queue() local
1667 for_each_engine(engine, gt, id) { in igt_reset_queue()
1672 bool using_guc = intel_engine_uses_guc(engine); in igt_reset_queue()
1674 if (!intel_engine_can_store_dword(engine)) in igt_reset_queue()
1678 err = intel_selftest_modify_policy(engine, &saved, in igt_reset_queue()
1681 pr_err("[%s] Modify policy failed: %d!\n", engine->name, err); in igt_reset_queue()
1686 prev = hang_create_request(&h, engine); in igt_reset_queue()
1689 pr_err("[%s] Create 'prev' hang request failed: %d!\n", engine->name, err); in igt_reset_queue()
1701 rq = hang_create_request(&h, engine); in igt_reset_queue()
1704 pr_err("[%s] Create hang request failed: %d!\n", engine->name, err); in igt_reset_queue()
1719 * engine and so avoid repeatedly resetting innocents. in igt_reset_queue()
1721 err = wait_for_others(gt, engine); in igt_reset_queue()
1724 __func__, engine->name); in igt_reset_queue()
1737 __func__, engine->name, in igt_reset_queue()
1739 intel_engine_dump(engine, &p, in igt_reset_queue()
1740 "%s\n", engine->name); in igt_reset_queue()
1784 engine->name, count); in igt_reset_queue()
1787 intel_gt_chipset_flush(engine->gt); in igt_reset_queue()
1793 int err2 = intel_selftest_restore_policy(engine, &saved); in igt_reset_queue()
1797 __func__, __LINE__, engine->name, err2); in igt_reset_queue()
1806 pr_err("[%s] Flush failed: %d!\n", engine->name, err); in igt_reset_queue()
1826 struct intel_engine_cs *engine; in igt_handle_error() local
1832 engine = intel_selftest_find_any_engine(gt); in igt_handle_error()
1834 /* Check that we can issue a global GPU and engine reset */ in igt_handle_error()
1839 if (!engine || !intel_engine_can_store_dword(engine)) in igt_handle_error()
1844 pr_err("[%s] Hang init failed: %d!\n", engine->name, err); in igt_handle_error()
1848 rq = hang_create_request(&h, engine); in igt_handle_error()
1851 pr_err("[%s] Create hang request failed: %d!\n", engine->name, err); in igt_handle_error()
1863 intel_engine_dump(rq->engine, &p, "%s\n", rq->engine->name); in igt_handle_error()
1874 intel_gt_handle_error(gt, engine->mask, 0, NULL); in igt_handle_error()
1891 static int __igt_atomic_reset_engine(struct intel_engine_cs *engine, in __igt_atomic_reset_engine() argument
1895 struct tasklet_struct * const t = &engine->sched_engine->tasklet; in __igt_atomic_reset_engine()
1899 engine->name, mode, p->name); in __igt_atomic_reset_engine()
1907 err = __intel_engine_reset_bh(engine, NULL); in __igt_atomic_reset_engine()
1919 engine->name, mode, p->name); in __igt_atomic_reset_engine()
1924 static int igt_atomic_reset_engine(struct intel_engine_cs *engine, in igt_atomic_reset_engine() argument
1931 err = __igt_atomic_reset_engine(engine, p, "idle"); in igt_atomic_reset_engine()
1935 err = hang_init(&h, engine->gt); in igt_atomic_reset_engine()
1937 pr_err("[%s] Hang init failed: %d!\n", engine->name, err); in igt_atomic_reset_engine()
1941 rq = hang_create_request(&h, engine); in igt_atomic_reset_engine()
1944 pr_err("[%s] Create hang request failed: %d!\n", engine->name, err); in igt_atomic_reset_engine()
1952 err = __igt_atomic_reset_engine(engine, p, "active"); in igt_atomic_reset_engine()
1955 __func__, engine->name, in igt_atomic_reset_engine()
1957 intel_gt_set_wedged(engine->gt); in igt_atomic_reset_engine()
1964 intel_wedge_on_timeout(&w, engine->gt, HZ / 20 /* 50ms */) in igt_atomic_reset_engine()
1966 if (intel_gt_is_wedged(engine->gt)) in igt_atomic_reset_engine()
1997 struct intel_engine_cs *engine; in igt_reset_engines_atomic() local
2000 for_each_engine(engine, gt, id) { in igt_reset_engines_atomic()
2001 err = igt_atomic_reset_engine(engine, p); in igt_reset_engines_atomic()