Lines Matching +full:global +full:- +full:reset
1 // SPDX-License-Identifier: MIT
47 h->gt = gt; in hang_init()
49 h->ctx = kernel_context(gt->i915, NULL); in hang_init()
50 if (IS_ERR(h->ctx)) in hang_init()
51 return PTR_ERR(h->ctx); in hang_init()
53 GEM_BUG_ON(i915_gem_context_is_bannable(h->ctx)); in hang_init()
55 h->hws = i915_gem_object_create_internal(gt->i915, PAGE_SIZE); in hang_init()
56 if (IS_ERR(h->hws)) { in hang_init()
57 err = PTR_ERR(h->hws); in hang_init()
61 h->obj = i915_gem_object_create_internal(gt->i915, PAGE_SIZE); in hang_init()
62 if (IS_ERR(h->obj)) { in hang_init()
63 err = PTR_ERR(h->obj); in hang_init()
67 i915_gem_object_set_cache_coherency(h->hws, I915_CACHE_LLC); in hang_init()
68 vaddr = i915_gem_object_pin_map_unlocked(h->hws, I915_MAP_WB); in hang_init()
73 h->seqno = memset(vaddr, 0xff, PAGE_SIZE); in hang_init()
75 vaddr = i915_gem_object_pin_map_unlocked(h->obj, in hang_init()
76 intel_gt_coherent_map_type(gt, h->obj, false)); in hang_init()
81 h->batch = vaddr; in hang_init()
86 i915_gem_object_unpin_map(h->hws); in hang_init()
88 i915_gem_object_put(h->obj); in hang_init()
90 i915_gem_object_put(h->hws); in hang_init()
92 kernel_context_close(h->ctx); in hang_init()
100 offset_in_page(sizeof(u32) * rq->fence.context); in hws_address()
106 struct intel_gt *gt = h->gt; in hang_create_request()
107 struct i915_address_space *vm = i915_gem_context_get_eb_vm(h->ctx); in hang_create_request()
116 obj = i915_gem_object_create_internal(gt->i915, PAGE_SIZE); in hang_create_request()
129 i915_gem_object_unpin_map(h->obj); in hang_create_request()
130 i915_gem_object_put(h->obj); in hang_create_request()
132 h->obj = obj; in hang_create_request()
133 h->batch = vaddr; in hang_create_request()
135 vma = i915_vma_instance(h->obj, vm, NULL); in hang_create_request()
141 hws = i915_vma_instance(h->hws, vm, NULL); in hang_create_request()
157 rq = igt_request_alloc(h->ctx, engine); in hang_create_request()
171 batch = h->batch; in hang_create_request()
172 if (GRAPHICS_VER(gt->i915) >= 8) { in hang_create_request()
176 *batch++ = rq->fence.seqno; in hang_create_request()
186 } else if (GRAPHICS_VER(gt->i915) >= 6) { in hang_create_request()
190 *batch++ = rq->fence.seqno; in hang_create_request()
199 } else if (GRAPHICS_VER(gt->i915) >= 4) { in hang_create_request()
203 *batch++ = rq->fence.seqno; in hang_create_request()
215 *batch++ = rq->fence.seqno; in hang_create_request()
226 intel_gt_chipset_flush(engine->gt); in hang_create_request()
228 if (rq->engine->emit_init_breadcrumb) { in hang_create_request()
229 err = rq->engine->emit_init_breadcrumb(rq); in hang_create_request()
235 if (GRAPHICS_VER(gt->i915) <= 5) in hang_create_request()
238 err = rq->engine->emit_bb_start(rq, i915_vma_offset(vma), PAGE_SIZE, flags); in hang_create_request()
255 return READ_ONCE(h->seqno[rq->fence.context % (PAGE_SIZE/sizeof(u32))]); in hws_seqno()
260 *h->batch = MI_BATCH_BUFFER_END; in hang_fini()
261 intel_gt_chipset_flush(h->gt); in hang_fini()
263 i915_gem_object_unpin_map(h->obj); in hang_fini()
264 i915_gem_object_put(h->obj); in hang_fini()
266 i915_gem_object_unpin_map(h->hws); in hang_fini()
267 i915_gem_object_put(h->hws); in hang_fini()
269 kernel_context_close(h->ctx); in hang_fini()
271 igt_flush_test(h->gt->i915); in hang_fini()
277 rq->fence.seqno), in wait_until_running()
280 rq->fence.seqno), in wait_until_running()
310 engine->name, err); in igt_hang_sanitycheck()
317 intel_gt_chipset_flush(engine->gt); in igt_hang_sanitycheck()
326 timeout = -EIO; in igt_hang_sanitycheck()
333 engine->name, err); in igt_hang_sanitycheck()
351 struct i915_gpu_error *global = >->i915->gpu_error; in igt_reset_nop() local
358 /* Check that we can reset during non-user portions of requests */ in igt_reset_nop()
360 reset_count = i915_reset_count(global); in igt_reset_nop()
370 pr_err("[%s] Create context failed: %d!\n", engine->name, err); in igt_reset_nop()
381 engine->name, err); in igt_reset_nop()
396 pr_err("[%s] GT is wedged!\n", engine->name); in igt_reset_nop()
397 err = -EIO; in igt_reset_nop()
401 if (i915_reset_count(global) != reset_count + ++count) { in igt_reset_nop()
402 pr_err("[%s] Reset not recorded: %d vs %d + %d!\n", in igt_reset_nop()
403 engine->name, i915_reset_count(global), reset_count, count); in igt_reset_nop()
404 err = -EINVAL; in igt_reset_nop()
408 err = igt_flush_test(gt->i915); in igt_reset_nop()
410 pr_err("[%s] Flush failed: %d!\n", engine->name, err); in igt_reset_nop()
416 if (igt_flush_test(gt->i915)) { in igt_reset_nop()
418 err = -EIO; in igt_reset_nop()
427 struct i915_gpu_error *global = >->i915->gpu_error; in igt_reset_nop_engine() local
431 /* Check that we can engine-reset during non-user portions */ in igt_reset_nop_engine()
445 * more. Thus a nop batch cannot be used as a reset test in igt_reset_nop_engine()
452 pr_err("[%s] Create context failed: %pe!\n", engine->name, ce); in igt_reset_nop_engine()
456 reset_count = i915_reset_count(global); in igt_reset_nop_engine()
457 reset_engine_count = i915_reset_engine_count(global, engine); in igt_reset_nop_engine()
462 >->reset.flags)); in igt_reset_nop_engine()
467 pr_err("%s failed to idle before reset\n", in igt_reset_nop_engine()
468 engine->name); in igt_reset_nop_engine()
469 err = -EIO; in igt_reset_nop_engine()
479 drm_info_printer(gt->i915->drm.dev); in igt_reset_nop_engine()
483 engine->name); in igt_reset_nop_engine()
487 engine->name); in igt_reset_nop_engine()
501 engine->name, err); in igt_reset_nop_engine()
505 if (i915_reset_count(global) != reset_count) { in igt_reset_nop_engine()
506 pr_err("Full GPU reset recorded! (engine reset expected)\n"); in igt_reset_nop_engine()
507 err = -EINVAL; in igt_reset_nop_engine()
511 if (i915_reset_engine_count(global, engine) != in igt_reset_nop_engine()
513 pr_err("%s engine reset not recorded!\n", in igt_reset_nop_engine()
514 engine->name); in igt_reset_nop_engine()
515 err = -EINVAL; in igt_reset_nop_engine()
519 clear_and_wake_up_bit(I915_RESET_ENGINE + id, >->reset.flags); in igt_reset_nop_engine()
522 pr_info("%s(%s): %d resets\n", __func__, engine->name, count); in igt_reset_nop_engine()
525 if (igt_flush_test(gt->i915)) in igt_reset_nop_engine()
526 err = -EIO; in igt_reset_nop_engine()
536 engine->reset_timeout.probability = 999; in force_reset_timeout()
537 atomic_set(&engine->reset_timeout.times, -1); in force_reset_timeout()
542 memset(&engine->reset_timeout, 0, sizeof(engine->reset_timeout)); in cancel_reset_timeout()
551 /* Check that we can recover from engine-reset failues */ in igt_reset_fail_engine()
562 /* Can't manually break the reset if i915 doesn't perform it */ in igt_reset_fail_engine()
568 pr_err("[%s] Create context failed: %pe!\n", engine->name, ce); in igt_reset_fail_engine()
574 >->reset.flags)); in igt_reset_fail_engine()
588 pr_err("%s failed to idle before reset\n", in igt_reset_fail_engine()
589 engine->name); in igt_reset_fail_engine()
590 err = -EIO; in igt_reset_fail_engine()
600 drm_info_printer(gt->i915->drm.dev); in igt_reset_fail_engine()
604 engine->name); in igt_reset_fail_engine()
608 engine->name); in igt_reset_fail_engine()
629 engine->name, err); in igt_reset_fail_engine()
638 if (err != -ETIMEDOUT) { in igt_reset_fail_engine()
640 engine->name, err); in igt_reset_fail_engine()
650 drm_info_printer(gt->i915->drm.dev); in igt_reset_fail_engine()
655 engine->name); in igt_reset_fail_engine()
659 engine->name); in igt_reset_fail_engine()
662 err = -EIO; in igt_reset_fail_engine()
669 pr_info("%s(%s): %d resets\n", __func__, engine->name, count); in igt_reset_fail_engine()
671 clear_and_wake_up_bit(I915_RESET_ENGINE + id, >->reset.flags); in igt_reset_fail_engine()
675 if (igt_flush_test(gt->i915)) in igt_reset_fail_engine()
676 err = -EIO; in igt_reset_fail_engine()
686 struct i915_gpu_error *global = >->i915->gpu_error; in __igt_reset_engine() local
692 /* Check that we can issue an engine reset on an idle engine (no-op) */ in __igt_reset_engine()
716 pr_err("%s failed to idle before reset\n", in __igt_reset_engine()
717 engine->name); in __igt_reset_engine()
718 err = -EIO; in __igt_reset_engine()
722 reset_count = i915_reset_count(global); in __igt_reset_engine()
723 reset_engine_count = i915_reset_engine_count(global, engine); in __igt_reset_engine()
727 >->reset.flags)); in __igt_reset_engine()
737 pr_err("[%s] Modify policy failed: %d!\n", engine->name, err); in __igt_reset_engine()
746 engine->name, err); in __igt_reset_engine()
754 struct drm_printer p = drm_info_printer(gt->i915->drm.dev); in __igt_reset_engine()
757 __func__, rq->fence.seqno, hws_seqno(&h, rq)); in __igt_reset_engine()
759 "%s\n", engine->name); in __igt_reset_engine()
762 err = -EIO; in __igt_reset_engine()
771 engine->name, err); in __igt_reset_engine()
777 /* Ensure the reset happens and kills the engine */ in __igt_reset_engine()
781 engine->name, rq->fence.context, in __igt_reset_engine()
782 rq->fence.seqno, rq->context->guc_id.id, err); in __igt_reset_engine()
789 if (i915_reset_count(global) != reset_count) { in __igt_reset_engine()
790 pr_err("Full GPU reset recorded! (engine reset expected)\n"); in __igt_reset_engine()
791 err = -EINVAL; in __igt_reset_engine()
797 if (i915_reset_engine_count(global, engine) != in __igt_reset_engine()
799 pr_err("%s engine reset not recorded!\n", in __igt_reset_engine()
800 engine->name); in __igt_reset_engine()
801 err = -EINVAL; in __igt_reset_engine()
811 pr_err("[%s] Restore policy failed: %d!\n", engine->name, err); in __igt_reset_engine()
817 clear_and_wake_up_bit(I915_RESET_ENGINE + id, >->reset.flags); in __igt_reset_engine()
820 engine->name, count, active ? "active" : "idle"); in __igt_reset_engine()
825 err = igt_flush_test(gt->i915); in __igt_reset_engine()
827 pr_err("[%s] Flush failed: %d!\n", engine->name, err); in __igt_reset_engine()
834 err = -EIO; in __igt_reset_engine()
877 rq->engine->name, in active_request_put()
878 rq->fence.context, in active_request_put()
879 rq->fence.seqno); in active_request_put()
882 intel_gt_set_wedged(rq->engine->gt); in active_request_put()
883 err = -EIO; in active_request_put()
895 struct intel_engine_cs *engine = arg->engine; in active_engine()
904 arg->result = PTR_ERR(ce[count]); in active_engine()
906 engine->name, count, arg->result); in active_engine()
907 while (--count) in active_engine()
914 while (!READ_ONCE(arg->stop)) { in active_engine()
915 unsigned int idx = count++ & (ARRAY_SIZE(rq) - 1); in active_engine()
922 pr_err("[%s] Create request #%d failed: %d!\n", engine->name, idx, err); in active_engine()
929 if (engine->sched_engine->schedule && arg->flags & TEST_PRIORITY) { in active_engine()
934 engine->sched_engine->schedule(rq[idx], &attr); in active_engine()
939 pr_err("[%s] Request put failed: %d!\n", engine->name, err); in active_engine()
950 pr_err("[%s] Request put #%ld failed: %d!\n", engine->name, count, err); in active_engine()
959 arg->result = err; in active_engine()
966 struct i915_gpu_error *global = >->i915->gpu_error; in __igt_reset_engines() local
973 /* Check that issuing a reset on one engine does not interfere in __igt_reset_engines()
986 h.ctx->sched.priority = 1024; in __igt_reset_engines()
991 return -ENOMEM; in __igt_reset_engines()
994 unsigned long device = i915_reset_count(global); in __igt_reset_engines()
1006 pr_err("i915_reset_engine(%s:%s): failed to idle before reset\n", in __igt_reset_engines()
1007 engine->name, test_name); in __igt_reset_engines()
1008 err = -EIO; in __igt_reset_engines()
1017 i915_reset_engine_count(global, other); in __igt_reset_engines()
1029 other->name); in __igt_reset_engines()
1033 engine->name, err); in __igt_reset_engines()
1046 >->reset.flags)); in __igt_reset_engines()
1055 pr_err("[%s] Modify policy failed: %d!\n", engine->name, err); in __igt_reset_engines()
1064 engine->name, err); in __igt_reset_engines()
1072 struct drm_printer p = drm_info_printer(gt->i915->drm.dev); in __igt_reset_engines()
1075 __func__, rq->fence.seqno, hws_seqno(&h, rq)); in __igt_reset_engines()
1077 "%s\n", engine->name); in __igt_reset_engines()
1080 err = -EIO; in __igt_reset_engines()
1091 engine->name, test_name, err); in __igt_reset_engines()
1097 /* Ensure the reset happens and kills the engine */ in __igt_reset_engines()
1101 engine->name, rq->fence.context, in __igt_reset_engines()
1102 rq->fence.seqno, rq->context->guc_id.id, err); in __igt_reset_engines()
1108 if (rq->fence.error != -EIO) { in __igt_reset_engines()
1109 pr_err("i915_reset_engine(%s:%s): failed to reset request %lld:%lld [0x%04X]\n", in __igt_reset_engines()
1110 engine->name, test_name, in __igt_reset_engines()
1111 rq->fence.context, in __igt_reset_engines()
1112 rq->fence.seqno, rq->context->guc_id.id); in __igt_reset_engines()
1117 err = -EIO; in __igt_reset_engines()
1123 drm_info_printer(gt->i915->drm.dev); in __igt_reset_engines()
1126 " failed to complete request %llx:%lld after reset\n", in __igt_reset_engines()
1127 engine->name, test_name, in __igt_reset_engines()
1128 rq->fence.context, in __igt_reset_engines()
1129 rq->fence.seqno); in __igt_reset_engines()
1131 "%s\n", engine->name); in __igt_reset_engines()
1136 err = -EIO; in __igt_reset_engines()
1148 drm_info_printer(gt->i915->drm.dev); in __igt_reset_engines()
1151 " failed to idle after reset\n", in __igt_reset_engines()
1152 engine->name, test_name); in __igt_reset_engines()
1154 "%s\n", engine->name); in __igt_reset_engines()
1156 err = -EIO; in __igt_reset_engines()
1163 pr_err("[%s] Restore policy failed: %d!\n", engine->name, err2); in __igt_reset_engines()
1169 clear_and_wake_up_bit(I915_RESET_ENGINE + id, >->reset.flags); in __igt_reset_engines()
1173 engine->name, test_name, count); in __igt_reset_engines()
1177 reported = i915_reset_engine_count(global, engine); in __igt_reset_engines()
1178 reported -= threads[engine->id].resets; in __igt_reset_engines()
1180 pr_err("i915_reset_engine(%s:%s): reset %lu times, but reported %lu\n", in __igt_reset_engines()
1181 engine->name, test_name, count, reported); in __igt_reset_engines()
1183 err = -EINVAL; in __igt_reset_engines()
1199 other->name, ret); in __igt_reset_engines()
1208 if (other->uabi_class != engine->uabi_class && in __igt_reset_engines()
1210 i915_reset_engine_count(global, other)) { in __igt_reset_engines()
1211 pr_err("Innocent engine %s was reset (count=%ld)\n", in __igt_reset_engines()
1212 other->name, in __igt_reset_engines()
1213 i915_reset_engine_count(global, other) - in __igt_reset_engines()
1216 err = -EINVAL; in __igt_reset_engines()
1221 if (device != i915_reset_count(global)) { in __igt_reset_engines()
1222 pr_err("Global reset (count=%ld)!\n", in __igt_reset_engines()
1223 i915_reset_count(global) - device); in __igt_reset_engines()
1225 err = -EINVAL; in __igt_reset_engines()
1231 err = igt_flush_test(gt->i915); in __igt_reset_engines()
1233 pr_err("[%s] Flush failed: %d!\n", engine->name, err); in __igt_reset_engines()
1240 err = -EIO; in __igt_reset_engines()
1256 { "others-idle", TEST_OTHERS }, in igt_reset_engines()
1257 { "others-active", TEST_OTHERS | TEST_ACTIVE }, in igt_reset_engines()
1259 "others-priority", in igt_reset_engines()
1263 "self-priority", in igt_reset_engines()
1272 for (p = phases; p->name; p++) { in igt_reset_engines()
1273 if (p->flags & TEST_PRIORITY) { in igt_reset_engines()
1274 if (!(gt->i915->caps.scheduler & I915_SCHEDULER_CAP_PRIORITY)) in igt_reset_engines()
1278 err = __igt_reset_engines(arg, p->name, p->flags); in igt_reset_engines()
1288 u32 count = i915_reset_count(>->i915->gpu_error); in fake_hangcheck()
1298 struct i915_gpu_error *global = >->i915->gpu_error; in igt_reset_wait() local
1311 /* Check that we detect a stuck waiter and issue a reset */ in igt_reset_wait()
1317 pr_err("[%s] Hang init failed: %d!\n", engine->name, err); in igt_reset_wait()
1324 pr_err("[%s] Create hang request failed: %d!\n", engine->name, err); in igt_reset_wait()
1332 struct drm_printer p = drm_info_printer(gt->i915->drm.dev); in igt_reset_wait()
1335 __func__, rq->fence.seqno, hws_seqno(&h, rq)); in igt_reset_wait()
1336 intel_engine_dump(rq->engine, &p, "%s\n", rq->engine->name); in igt_reset_wait()
1340 err = -EIO; in igt_reset_wait()
1354 if (i915_reset_count(global) == reset_count) { in igt_reset_wait()
1355 pr_err("No GPU reset recorded!\n"); in igt_reset_wait()
1356 err = -EINVAL; in igt_reset_wait()
1368 return -EIO; in igt_reset_wait()
1381 struct i915_address_space *vm = arg->vma->vm; in evict_vma()
1382 struct drm_mm_node evict = arg->vma->node; in evict_vma()
1385 complete(&arg->completion); in evict_vma()
1387 mutex_lock(&vm->mutex); in evict_vma()
1389 mutex_unlock(&vm->mutex); in evict_vma()
1399 complete(&arg->completion); in evict_fence()
1402 err = i915_gem_object_set_tiling(arg->vma->obj, I915_TILING_Y, 512); in evict_fence()
1404 pr_err("Invalid Y-tiling settings; err:%d\n", err); in evict_fence()
1408 err = i915_vma_pin(arg->vma, 0, 0, PIN_GLOBAL | PIN_MAPPABLE); in evict_fence()
1410 pr_err("Unable to pin vma for Y-tiled fence; err:%d\n", err); in evict_fence()
1414 err = i915_vma_pin_fence(arg->vma); in evict_fence()
1415 i915_vma_unpin(arg->vma); in evict_fence()
1417 pr_err("Unable to pin Y-tiled fence; err:%d\n", err); in evict_fence()
1421 i915_vma_unpin_fence(arg->vma); in evict_fence()
1440 if (!gt->ggtt->num_fences && flags & EXEC_OBJECT_NEEDS_FENCE) in __igt_reset_evict_vma()
1452 pr_err("[%s] Hang init failed: %d!\n", engine->name, err); in __igt_reset_evict_vma()
1456 obj = i915_gem_object_create_internal(gt->i915, SZ_1M); in __igt_reset_evict_vma()
1459 pr_err("[%s] Create object failed: %d!\n", engine->name, err); in __igt_reset_evict_vma()
1466 pr_err("Invalid X-tiling settings; err:%d\n", err); in __igt_reset_evict_vma()
1474 pr_err("[%s] VMA instance failed: %d!\n", engine->name, err); in __igt_reset_evict_vma()
1481 pr_err("[%s] Create hang request failed: %d!\n", engine->name, err); in __igt_reset_evict_vma()
1493 pr_err("[%s] VMA pin failed: %d!\n", engine->name, err); in __igt_reset_evict_vma()
1500 pr_err("Unable to pin X-tiled fence; err:%d\n", err); in __igt_reset_evict_vma()
1509 pr_err("[%s] Move to active failed: %d!\n", engine->name, err); in __igt_reset_evict_vma()
1521 struct drm_printer p = drm_info_printer(gt->i915->drm.dev); in __igt_reset_evict_vma()
1524 __func__, rq->fence.seqno, hws_seqno(&h, rq)); 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()
1544 if (wait_for(!list_empty(&rq->fence.cb_list), 10)) { in __igt_reset_evict_vma()
1545 struct drm_printer p = drm_info_printer(gt->i915->drm.dev); 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()
1562 /* The reset, even indirectly, should take less than 10ms. */ in __igt_reset_evict_vma()
1576 return -EIO; in __igt_reset_evict_vma()
1585 return __igt_reset_evict_vma(gt, >->ggtt->vm, in igt_reset_evict_ggtt()
1595 /* aliasing == global gtt locking, covered above */ in igt_reset_evict_ppgtt()
1596 if (INTEL_PPGTT(gt->i915) < INTEL_PPGTT_FULL) in igt_reset_evict_ppgtt()
1603 err = __igt_reset_evict_vma(gt, &ppgtt->vm, in igt_reset_evict_ppgtt()
1605 i915_vm_put(&ppgtt->vm); in igt_reset_evict_ppgtt()
1614 return __igt_reset_evict_vma(gt, >->ggtt->vm, in igt_reset_evict_fence()
1629 return -EIO; in wait_for_others()
1638 struct i915_gpu_error *global = >->i915->gpu_error; in igt_reset_queue() local
1666 pr_err("[%s] Modify policy failed: %d!\n", engine->name, err); in igt_reset_queue()
1674 pr_err("[%s] Create 'prev' hang request failed: %d!\n", engine->name, err); in igt_reset_queue()
1689 pr_err("[%s] Create hang request failed: %d!\n", engine->name, err); in igt_reset_queue()
1698 * very well. If we trigger a device reset twice in in igt_reset_queue()
1708 pr_err("%s(%s): Failed to idle other inactive engines after device reset\n", in igt_reset_queue()
1709 __func__, engine->name); in igt_reset_queue()
1719 struct drm_printer p = drm_info_printer(gt->i915->drm.dev); in igt_reset_queue()
1722 __func__, engine->name, in igt_reset_queue()
1723 prev->fence.seqno, hws_seqno(&h, prev)); in igt_reset_queue()
1725 "%s\n", engine->name); in igt_reset_queue()
1732 err = -EIO; in igt_reset_queue()
1738 if (prev->fence.error != -EIO) { in igt_reset_queue()
1739 pr_err("GPU reset not recorded on hanging request [fence.error=%d]!\n", in igt_reset_queue()
1740 prev->fence.error); in igt_reset_queue()
1743 err = -EINVAL; in igt_reset_queue()
1747 if (rq->fence.error) { in igt_reset_queue()
1748 pr_err("Fence error status not zero [%d] after unrelated reset\n", in igt_reset_queue()
1749 rq->fence.error); in igt_reset_queue()
1752 err = -EINVAL; in igt_reset_queue()
1756 if (i915_reset_count(global) == reset_count) { in igt_reset_queue()
1757 pr_err("No GPU reset recorded!\n"); in igt_reset_queue()
1760 err = -EINVAL; in igt_reset_queue()
1769 engine->name, count); in igt_reset_queue()
1772 intel_gt_chipset_flush(engine->gt); in igt_reset_queue()
1782 __func__, __LINE__, engine->name, err2); in igt_reset_queue()
1789 err = igt_flush_test(gt->i915); in igt_reset_queue()
1791 pr_err("[%s] Flush failed: %d!\n", engine->name, err); in igt_reset_queue()
1802 return -EIO; in igt_reset_queue()
1810 struct i915_gpu_error *global = >->i915->gpu_error; in igt_handle_error() local
1819 /* Check that we can issue a global GPU and engine reset */ in igt_handle_error()
1829 pr_err("[%s] Hang init failed: %d!\n", engine->name, err); in igt_handle_error()
1836 pr_err("[%s] Create hang request failed: %d!\n", engine->name, err); in igt_handle_error()
1844 struct drm_printer p = drm_info_printer(gt->i915->drm.dev); in igt_handle_error()
1847 __func__, rq->fence.seqno, hws_seqno(&h, rq)); in igt_handle_error()
1848 intel_engine_dump(rq->engine, &p, "%s\n", rq->engine->name); in igt_handle_error()
1852 err = -EIO; in igt_handle_error()
1857 error = xchg(&global->first_error, (void *)-1); in igt_handle_error()
1859 intel_gt_handle_error(gt, engine->mask, 0, NULL); in igt_handle_error()
1861 xchg(&global->first_error, error); in igt_handle_error()
1863 if (rq->fence.error != -EIO) { in igt_handle_error()
1865 err = -EINVAL; in igt_handle_error()
1880 struct tasklet_struct * const t = &engine->sched_engine->tasklet; in __igt_atomic_reset_engine()
1884 engine->name, mode, p->name); in __igt_atomic_reset_engine()
1886 if (t->func) in __igt_atomic_reset_engine()
1888 if (strcmp(p->name, "softirq")) in __igt_atomic_reset_engine()
1890 p->critical_section_begin(); in __igt_atomic_reset_engine()
1894 p->critical_section_end(); in __igt_atomic_reset_engine()
1895 if (strcmp(p->name, "softirq")) in __igt_atomic_reset_engine()
1897 if (t->func) { in __igt_atomic_reset_engine()
1904 engine->name, mode, p->name); in __igt_atomic_reset_engine()
1920 err = hang_init(&h, engine->gt); in igt_atomic_reset_engine()
1922 pr_err("[%s] Hang init failed: %d!\n", engine->name, err); in igt_atomic_reset_engine()
1929 pr_err("[%s] Create hang request failed: %d!\n", engine->name, err); in igt_atomic_reset_engine()
1940 __func__, engine->name, in igt_atomic_reset_engine()
1941 rq->fence.seqno, hws_seqno(&h, rq)); in igt_atomic_reset_engine()
1942 intel_gt_set_wedged(engine->gt); in igt_atomic_reset_engine()
1943 err = -EIO; in igt_atomic_reset_engine()
1949 intel_wedge_on_timeout(&w, engine->gt, HZ / 20 /* 50ms */) in igt_atomic_reset_engine()
1951 if (intel_gt_is_wedged(engine->gt)) in igt_atomic_reset_engine()
1952 err = -EIO; in igt_atomic_reset_engine()
1972 if (intel_uc_uses_guc_submission(>->uc)) in igt_reset_engines_atomic()
1981 for (p = igt_atomic_phases; p->name; p++) { in igt_reset_engines_atomic()
1993 /* As we poke around the guts, do a full reset before continuing. */ in igt_reset_engines_atomic()
2027 return -EIO; /* we're long past hope of a successful reset */ in intel_hangcheck_live_selftests()
2029 wakeref = intel_runtime_pm_get(gt->uncore->rpm); in intel_hangcheck_live_selftests()
2033 intel_runtime_pm_put(gt->uncore->rpm, wakeref); in intel_hangcheck_live_selftests()