Merge tag 'drm-misc-next-fixes-2021-09-09' of git://anongit.freedesktop.org/drm/drm...
[linux-2.6-microblaze.git] / drivers / gpu / drm / i915 / gt / selftest_hangcheck.c
index 853246f..2c1ed32 100644 (file)
@@ -17,6 +17,8 @@
 #include "selftests/igt_flush_test.h"
 #include "selftests/igt_reset.h"
 #include "selftests/igt_atomic.h"
+#include "selftests/igt_spinner.h"
+#include "selftests/intel_scheduler_helpers.h"
 
 #include "selftests/mock_drm.h"
 
@@ -42,7 +44,7 @@ static int hang_init(struct hang *h, struct intel_gt *gt)
        memset(h, 0, sizeof(*h));
        h->gt = gt;
 
-       h->ctx = kernel_context(gt->i915);
+       h->ctx = kernel_context(gt->i915, NULL);
        if (IS_ERR(h->ctx))
                return PTR_ERR(h->ctx);
 
@@ -378,6 +380,7 @@ static int igt_reset_nop(void *arg)
                        ce = intel_context_create(engine);
                        if (IS_ERR(ce)) {
                                err = PTR_ERR(ce);
+                               pr_err("[%s] Create context failed: %d!\n", engine->name, err);
                                break;
                        }
 
@@ -387,6 +390,8 @@ static int igt_reset_nop(void *arg)
                                rq = intel_context_create_request(ce);
                                if (IS_ERR(rq)) {
                                        err = PTR_ERR(rq);
+                                       pr_err("[%s] Create request failed: %d!\n",
+                                              engine->name, err);
                                        break;
                                }
 
@@ -401,24 +406,31 @@ static int igt_reset_nop(void *arg)
                igt_global_reset_unlock(gt);
 
                if (intel_gt_is_wedged(gt)) {
+                       pr_err("[%s] GT is wedged!\n", engine->name);
                        err = -EIO;
                        break;
                }
 
                if (i915_reset_count(global) != reset_count + ++count) {
-                       pr_err("Full GPU reset not recorded!\n");
+                       pr_err("[%s] Reset not recorded: %d vs %d + %d!\n",
+                              engine->name, i915_reset_count(global), reset_count, count);
                        err = -EINVAL;
                        break;
                }
 
                err = igt_flush_test(gt->i915);
-               if (err)
+               if (err) {
+                       pr_err("[%s] Flush failed: %d!\n", engine->name, err);
                        break;
+               }
        } while (time_before(jiffies, end_time));
        pr_info("%s: %d resets\n", __func__, count);
 
-       if (igt_flush_test(gt->i915))
+       if (igt_flush_test(gt->i915)) {
+               pr_err("Post flush failed: %d!\n", err);
                err = -EIO;
+       }
+
        return err;
 }
 
@@ -440,9 +452,19 @@ static int igt_reset_nop_engine(void *arg)
                IGT_TIMEOUT(end_time);
                int err;
 
+               if (intel_engine_uses_guc(engine)) {
+                       /* Engine level resets are triggered by GuC when a hang
+                        * is detected. They can't be triggered by the KMD any
+                        * more. Thus a nop batch cannot be used as a reset test
+                        */
+                       continue;
+               }
+
                ce = intel_context_create(engine);
-               if (IS_ERR(ce))
+               if (IS_ERR(ce)) {
+                       pr_err("[%s] Create context failed: %pe!\n", engine->name, ce);
                        return PTR_ERR(ce);
+               }
 
                reset_count = i915_reset_count(global);
                reset_engine_count = i915_reset_engine_count(global, engine);
@@ -549,9 +571,15 @@ static int igt_reset_fail_engine(void *arg)
                IGT_TIMEOUT(end_time);
                int err;
 
+               /* Can't manually break the reset if i915 doesn't perform it */
+               if (intel_engine_uses_guc(engine))
+                       continue;
+
                ce = intel_context_create(engine);
-               if (IS_ERR(ce))
+               if (IS_ERR(ce)) {
+                       pr_err("[%s] Create context failed: %pe!\n", engine->name, ce);
                        return PTR_ERR(ce);
+               }
 
                st_engine_heartbeat_disable(engine);
                set_bit(I915_RESET_ENGINE + id, &gt->reset.flags);
@@ -686,8 +714,12 @@ static int __igt_reset_engine(struct intel_gt *gt, bool active)
        for_each_engine(engine, gt, id) {
                unsigned int reset_count, reset_engine_count;
                unsigned long count;
+               bool using_guc = intel_engine_uses_guc(engine);
                IGT_TIMEOUT(end_time);
 
+               if (using_guc && !active)
+                       continue;
+
                if (active && !intel_engine_can_store_dword(engine))
                        continue;
 
@@ -705,13 +737,24 @@ static int __igt_reset_engine(struct intel_gt *gt, bool active)
                set_bit(I915_RESET_ENGINE + id, &gt->reset.flags);
                count = 0;
                do {
-                       if (active) {
-                               struct i915_request *rq;
+                       struct i915_request *rq = NULL;
+                       struct intel_selftest_saved_policy saved;
+                       int err2;
+
+                       err = intel_selftest_modify_policy(engine, &saved,
+                                                          SELFTEST_SCHEDULER_MODIFY_FAST_RESET);
+                       if (err) {
+                               pr_err("[%s] Modify policy failed: %d!\n", engine->name, err);
+                               break;
+                       }
 
+                       if (active) {
                                rq = hang_create_request(&h, engine);
                                if (IS_ERR(rq)) {
                                        err = PTR_ERR(rq);
-                                       break;
+                                       pr_err("[%s] Create hang request failed: %d!\n",
+                                              engine->name, err);
+                                       goto restore;
                                }
 
                                i915_request_get(rq);
@@ -727,34 +770,59 @@ static int __igt_reset_engine(struct intel_gt *gt, bool active)
 
                                        i915_request_put(rq);
                                        err = -EIO;
-                                       break;
+                                       goto restore;
                                }
+                       }
 
-                               i915_request_put(rq);
+                       if (!using_guc) {
+                               err = intel_engine_reset(engine, NULL);
+                               if (err) {
+                                       pr_err("intel_engine_reset(%s) failed, err:%d\n",
+                                              engine->name, err);
+                                       goto skip;
+                               }
                        }
 
-                       err = intel_engine_reset(engine, NULL);
-                       if (err) {
-                               pr_err("intel_engine_reset(%s) failed, err:%d\n",
-                                      engine->name, err);
-                               break;
+                       if (rq) {
+                               /* Ensure the reset happens and kills the engine */
+                               err = intel_selftest_wait_for_rq(rq);
+                               if (err)
+                                       pr_err("[%s] Wait for request %lld:%lld [0x%04X] failed: %d!\n",
+                                              engine->name, rq->fence.context,
+                                              rq->fence.seqno, rq->context->guc_id, err);
                        }
 
+skip:
+                       if (rq)
+                               i915_request_put(rq);
+
                        if (i915_reset_count(global) != reset_count) {
                                pr_err("Full GPU reset recorded! (engine reset expected)\n");
                                err = -EINVAL;
-                               break;
+                               goto restore;
                        }
 
-                       if (i915_reset_engine_count(global, engine) !=
-                           ++reset_engine_count) {
-                               pr_err("%s engine reset not recorded!\n",
-                                      engine->name);
-                               err = -EINVAL;
-                               break;
+                       /* GuC based resets are not logged per engine */
+                       if (!using_guc) {
+                               if (i915_reset_engine_count(global, engine) !=
+                                   ++reset_engine_count) {
+                                       pr_err("%s engine reset not recorded!\n",
+                                              engine->name);
+                                       err = -EINVAL;
+                                       goto restore;
+                               }
                        }
 
                        count++;
+
+restore:
+                       err2 = intel_selftest_restore_policy(engine, &saved);
+                       if (err2)
+                               pr_err("[%s] Restore policy failed: %d!\n", engine->name, err);
+                       if (err == 0)
+                               err = err2;
+                       if (err)
+                               break;
                } while (time_before(jiffies, end_time));
                clear_bit(I915_RESET_ENGINE + id, &gt->reset.flags);
                st_engine_heartbeat_enable(engine);
@@ -765,12 +833,16 @@ static int __igt_reset_engine(struct intel_gt *gt, bool active)
                        break;
 
                err = igt_flush_test(gt->i915);
-               if (err)
+               if (err) {
+                       pr_err("[%s] Flush failed: %d!\n", engine->name, err);
                        break;
+               }
        }
 
-       if (intel_gt_is_wedged(gt))
+       if (intel_gt_is_wedged(gt)) {
+               pr_err("GT is wedged!\n");
                err = -EIO;
+       }
 
        if (active)
                hang_fini(&h);
@@ -807,7 +879,7 @@ static int active_request_put(struct i915_request *rq)
        if (!rq)
                return 0;
 
-       if (i915_request_wait(rq, 0, 5 * HZ) < 0) {
+       if (i915_request_wait(rq, 0, 10 * HZ) < 0) {
                GEM_TRACE("%s timed out waiting for completion of fence %llx:%lld\n",
                          rq->engine->name,
                          rq->fence.context,
@@ -837,6 +909,7 @@ static int active_engine(void *data)
                ce[count] = intel_context_create(engine);
                if (IS_ERR(ce[count])) {
                        err = PTR_ERR(ce[count]);
+                       pr_err("[%s] Create context #%ld failed: %d!\n", engine->name, count, err);
                        while (--count)
                                intel_context_put(ce[count]);
                        return err;
@@ -852,23 +925,26 @@ static int active_engine(void *data)
                new = intel_context_create_request(ce[idx]);
                if (IS_ERR(new)) {
                        err = PTR_ERR(new);
+                       pr_err("[%s] Create request #%d failed: %d!\n", engine->name, idx, err);
                        break;
                }
 
                rq[idx] = i915_request_get(new);
                i915_request_add(new);
 
-               if (engine->schedule && arg->flags & TEST_PRIORITY) {
+               if (engine->sched_engine->schedule && arg->flags & TEST_PRIORITY) {
                        struct i915_sched_attr attr = {
                                .priority =
                                        i915_prandom_u32_max_state(512, &prng),
                        };
-                       engine->schedule(rq[idx], &attr);
+                       engine->sched_engine->schedule(rq[idx], &attr);
                }
 
                err = active_request_put(old);
-               if (err)
+               if (err) {
+                       pr_err("[%s] Request put failed: %d!\n", engine->name, err);
                        break;
+               }
 
                cond_resched();
        }
@@ -876,6 +952,9 @@ static int active_engine(void *data)
        for (count = 0; count < ARRAY_SIZE(rq); count++) {
                int err__ = active_request_put(rq[count]);
 
+               if (err)
+                       pr_err("[%s] Request put #%ld failed: %d!\n", engine->name, count, err);
+
                /* Keep the first error */
                if (!err)
                        err = err__;
@@ -916,10 +995,13 @@ static int __igt_reset_engines(struct intel_gt *gt,
                struct active_engine threads[I915_NUM_ENGINES] = {};
                unsigned long device = i915_reset_count(global);
                unsigned long count = 0, reported;
+               bool using_guc = intel_engine_uses_guc(engine);
                IGT_TIMEOUT(end_time);
 
-               if (flags & TEST_ACTIVE &&
-                   !intel_engine_can_store_dword(engine))
+               if (flags & TEST_ACTIVE) {
+                       if (!intel_engine_can_store_dword(engine))
+                               continue;
+               } else if (using_guc)
                        continue;
 
                if (!wait_for_idle(engine)) {
@@ -949,6 +1031,7 @@ static int __igt_reset_engines(struct intel_gt *gt,
                                          "igt/%s", other->name);
                        if (IS_ERR(tsk)) {
                                err = PTR_ERR(tsk);
+                               pr_err("[%s] Thread spawn failed: %d!\n", engine->name, err);
                                goto unwind;
                        }
 
@@ -958,16 +1041,27 @@ static int __igt_reset_engines(struct intel_gt *gt,
 
                yield(); /* start all threads before we begin */
 
-               st_engine_heartbeat_disable(engine);
+               st_engine_heartbeat_disable_no_pm(engine);
                set_bit(I915_RESET_ENGINE + id, &gt->reset.flags);
                do {
                        struct i915_request *rq = NULL;
+                       struct intel_selftest_saved_policy saved;
+                       int err2;
+
+                       err = intel_selftest_modify_policy(engine, &saved,
+                                                          SELFTEST_SCHEDULER_MODIFY_FAST_RESET);
+                       if (err) {
+                               pr_err("[%s] Modify policy failed: %d!\n", engine->name, err);
+                               break;
+                       }
 
                        if (flags & TEST_ACTIVE) {
                                rq = hang_create_request(&h, engine);
                                if (IS_ERR(rq)) {
                                        err = PTR_ERR(rq);
-                                       break;
+                                       pr_err("[%s] Create hang request failed: %d!\n",
+                                              engine->name, err);
+                                       goto restore;
                                }
 
                                i915_request_get(rq);
@@ -983,32 +1077,44 @@ static int __igt_reset_engines(struct intel_gt *gt,
 
                                        i915_request_put(rq);
                                        err = -EIO;
-                                       break;
+                                       goto restore;
                                }
+                       } else {
+                               intel_engine_pm_get(engine);
                        }
 
-                       err = intel_engine_reset(engine, NULL);
-                       if (err) {
-                               pr_err("i915_reset_engine(%s:%s): failed, err=%d\n",
-                                      engine->name, test_name, err);
-                               break;
+                       if (!using_guc) {
+                               err = intel_engine_reset(engine, NULL);
+                               if (err) {
+                                       pr_err("i915_reset_engine(%s:%s): failed, err=%d\n",
+                                              engine->name, test_name, err);
+                                       goto restore;
+                               }
+                       }
+
+                       if (rq) {
+                               /* Ensure the reset happens and kills the engine */
+                               err = intel_selftest_wait_for_rq(rq);
+                               if (err)
+                                       pr_err("[%s] Wait for request %lld:%lld [0x%04X] failed: %d!\n",
+                                              engine->name, rq->fence.context,
+                                              rq->fence.seqno, rq->context->guc_id, err);
                        }
 
                        count++;
 
                        if (rq) {
                                if (rq->fence.error != -EIO) {
-                                       pr_err("i915_reset_engine(%s:%s):"
-                                              " failed to reset request %llx:%lld\n",
+                                       pr_err("i915_reset_engine(%s:%s): failed to reset request %lld:%lld [0x%04X]\n",
                                               engine->name, test_name,
                                               rq->fence.context,
-                                              rq->fence.seqno);
+                                              rq->fence.seqno, rq->context->guc_id);
                                        i915_request_put(rq);
 
                                        GEM_TRACE_DUMP();
                                        intel_gt_set_wedged(gt);
                                        err = -EIO;
-                                       break;
+                                       goto restore;
                                }
 
                                if (i915_request_wait(rq, 0, HZ / 5) < 0) {
@@ -1027,12 +1133,15 @@ static int __igt_reset_engines(struct intel_gt *gt,
                                        GEM_TRACE_DUMP();
                                        intel_gt_set_wedged(gt);
                                        err = -EIO;
-                                       break;
+                                       goto restore;
                                }
 
                                i915_request_put(rq);
                        }
 
+                       if (!(flags & TEST_ACTIVE))
+                               intel_engine_pm_put(engine);
+
                        if (!(flags & TEST_SELF) && !wait_for_idle(engine)) {
                                struct drm_printer p =
                                        drm_info_printer(gt->i915->drm.dev);
@@ -1044,22 +1153,34 @@ static int __igt_reset_engines(struct intel_gt *gt,
                                                  "%s\n", engine->name);
 
                                err = -EIO;
-                               break;
+                               goto restore;
                        }
+
+restore:
+                       err2 = intel_selftest_restore_policy(engine, &saved);
+                       if (err2)
+                               pr_err("[%s] Restore policy failed: %d!\n", engine->name, err2);
+                       if (err == 0)
+                               err = err2;
+                       if (err)
+                               break;
                } while (time_before(jiffies, end_time));
                clear_bit(I915_RESET_ENGINE + id, &gt->reset.flags);
-               st_engine_heartbeat_enable(engine);
+               st_engine_heartbeat_enable_no_pm(engine);
 
                pr_info("i915_reset_engine(%s:%s): %lu resets\n",
                        engine->name, test_name, count);
 
-               reported = i915_reset_engine_count(global, engine);
-               reported -= threads[engine->id].resets;
-               if (reported != count) {
-                       pr_err("i915_reset_engine(%s:%s): reset %lu times, but reported %lu\n",
-                              engine->name, test_name, count, reported);
-                       if (!err)
-                               err = -EINVAL;
+               /* GuC based resets are not logged per engine */
+               if (!using_guc) {
+                       reported = i915_reset_engine_count(global, engine);
+                       reported -= threads[engine->id].resets;
+                       if (reported != count) {
+                               pr_err("i915_reset_engine(%s:%s): reset %lu times, but reported %lu\n",
+                                      engine->name, test_name, count, reported);
+                               if (!err)
+                                       err = -EINVAL;
+                       }
                }
 
 unwind:
@@ -1078,15 +1199,18 @@ unwind:
                        }
                        put_task_struct(threads[tmp].task);
 
-                       if (other->uabi_class != engine->uabi_class &&
-                           threads[tmp].resets !=
-                           i915_reset_engine_count(global, other)) {
-                               pr_err("Innocent engine %s was reset (count=%ld)\n",
-                                      other->name,
-                                      i915_reset_engine_count(global, other) -
-                                      threads[tmp].resets);
-                               if (!err)
-                                       err = -EINVAL;
+                       /* GuC based resets are not logged per engine */
+                       if (!using_guc) {
+                               if (other->uabi_class != engine->uabi_class &&
+                                   threads[tmp].resets !=
+                                   i915_reset_engine_count(global, other)) {
+                                       pr_err("Innocent engine %s was reset (count=%ld)\n",
+                                              other->name,
+                                              i915_reset_engine_count(global, other) -
+                                              threads[tmp].resets);
+                                       if (!err)
+                                               err = -EINVAL;
+                               }
                        }
                }
 
@@ -1101,8 +1225,10 @@ unwind:
                        break;
 
                err = igt_flush_test(gt->i915);
-               if (err)
+               if (err) {
+                       pr_err("[%s] Flush failed: %d!\n", engine->name, err);
                        break;
+               }
        }
 
        if (intel_gt_is_wedged(gt))
@@ -1180,12 +1306,15 @@ static int igt_reset_wait(void *arg)
        igt_global_reset_lock(gt);
 
        err = hang_init(&h, gt);
-       if (err)
+       if (err) {
+               pr_err("[%s] Hang init failed: %d!\n", engine->name, err);
                goto unlock;
+       }
 
        rq = hang_create_request(&h, engine);
        if (IS_ERR(rq)) {
                err = PTR_ERR(rq);
+               pr_err("[%s] Create hang request failed: %d!\n", engine->name, err);
                goto fini;
        }
 
@@ -1310,12 +1439,15 @@ static int __igt_reset_evict_vma(struct intel_gt *gt,
        /* Check that we can recover an unbind stuck on a hanging request */
 
        err = hang_init(&h, gt);
-       if (err)
+       if (err) {
+               pr_err("[%s] Hang init failed: %d!\n", engine->name, err);
                return err;
+       }
 
        obj = i915_gem_object_create_internal(gt->i915, SZ_1M);
        if (IS_ERR(obj)) {
                err = PTR_ERR(obj);
+               pr_err("[%s] Create object failed: %d!\n", engine->name, err);
                goto fini;
        }
 
@@ -1330,12 +1462,14 @@ static int __igt_reset_evict_vma(struct intel_gt *gt,
        arg.vma = i915_vma_instance(obj, vm, NULL);
        if (IS_ERR(arg.vma)) {
                err = PTR_ERR(arg.vma);
+               pr_err("[%s] VMA instance failed: %d!\n", engine->name, err);
                goto out_obj;
        }
 
        rq = hang_create_request(&h, engine);
        if (IS_ERR(rq)) {
                err = PTR_ERR(rq);
+               pr_err("[%s] Create hang request failed: %d!\n", engine->name, err);
                goto out_obj;
        }
 
@@ -1347,6 +1481,7 @@ static int __igt_reset_evict_vma(struct intel_gt *gt,
        err = i915_vma_pin(arg.vma, 0, 0, pin_flags);
        if (err) {
                i915_request_add(rq);
+               pr_err("[%s] VMA pin failed: %d!\n", engine->name, err);
                goto out_obj;
        }
 
@@ -1363,8 +1498,14 @@ static int __igt_reset_evict_vma(struct intel_gt *gt,
        i915_vma_lock(arg.vma);
        err = i915_request_await_object(rq, arg.vma->obj,
                                        flags & EXEC_OBJECT_WRITE);
-       if (err == 0)
+       if (err == 0) {
                err = i915_vma_move_to_active(arg.vma, rq, flags);
+               if (err)
+                       pr_err("[%s] Move to active failed: %d!\n", engine->name, err);
+       } else {
+               pr_err("[%s] Request await failed: %d!\n", engine->name, err);
+       }
+
        i915_vma_unlock(arg.vma);
 
        if (flags & EXEC_OBJECT_NEEDS_FENCE)
@@ -1392,6 +1533,7 @@ static int __igt_reset_evict_vma(struct intel_gt *gt,
        tsk = kthread_run(fn, &arg, "igt/evict_vma");
        if (IS_ERR(tsk)) {
                err = PTR_ERR(tsk);
+               pr_err("[%s] Thread spawn failed: %d!\n", engine->name, err);
                tsk = NULL;
                goto out_reset;
        }
@@ -1508,17 +1650,29 @@ static int igt_reset_queue(void *arg)
                goto unlock;
 
        for_each_engine(engine, gt, id) {
+               struct intel_selftest_saved_policy saved;
                struct i915_request *prev;
                IGT_TIMEOUT(end_time);
                unsigned int count;
+               bool using_guc = intel_engine_uses_guc(engine);
 
                if (!intel_engine_can_store_dword(engine))
                        continue;
 
+               if (using_guc) {
+                       err = intel_selftest_modify_policy(engine, &saved,
+                                                          SELFTEST_SCHEDULER_MODIFY_NO_HANGCHECK);
+                       if (err) {
+                               pr_err("[%s] Modify policy failed: %d!\n", engine->name, err);
+                               goto fini;
+                       }
+               }
+
                prev = hang_create_request(&h, engine);
                if (IS_ERR(prev)) {
                        err = PTR_ERR(prev);
-                       goto fini;
+                       pr_err("[%s] Create 'prev' hang request failed: %d!\n", engine->name, err);
+                       goto restore;
                }
 
                i915_request_get(prev);
@@ -1532,7 +1686,8 @@ static int igt_reset_queue(void *arg)
                        rq = hang_create_request(&h, engine);
                        if (IS_ERR(rq)) {
                                err = PTR_ERR(rq);
-                               goto fini;
+                               pr_err("[%s] Create hang request failed: %d!\n", engine->name, err);
+                               goto restore;
                        }
 
                        i915_request_get(rq);
@@ -1557,7 +1712,7 @@ static int igt_reset_queue(void *arg)
 
                                GEM_TRACE_DUMP();
                                intel_gt_set_wedged(gt);
-                               goto fini;
+                               goto restore;
                        }
 
                        if (!wait_until_running(&h, prev)) {
@@ -1575,7 +1730,7 @@ static int igt_reset_queue(void *arg)
                                intel_gt_set_wedged(gt);
 
                                err = -EIO;
-                               goto fini;
+                               goto restore;
                        }
 
                        reset_count = fake_hangcheck(gt, BIT(id));
@@ -1586,7 +1741,7 @@ static int igt_reset_queue(void *arg)
                                i915_request_put(rq);
                                i915_request_put(prev);
                                err = -EINVAL;
-                               goto fini;
+                               goto restore;
                        }
 
                        if (rq->fence.error) {
@@ -1595,7 +1750,7 @@ static int igt_reset_queue(void *arg)
                                i915_request_put(rq);
                                i915_request_put(prev);
                                err = -EINVAL;
-                               goto fini;
+                               goto restore;
                        }
 
                        if (i915_reset_count(global) == reset_count) {
@@ -1603,7 +1758,7 @@ static int igt_reset_queue(void *arg)
                                i915_request_put(rq);
                                i915_request_put(prev);
                                err = -EINVAL;
-                               goto fini;
+                               goto restore;
                        }
 
                        i915_request_put(prev);
@@ -1618,9 +1773,24 @@ static int igt_reset_queue(void *arg)
 
                i915_request_put(prev);
 
-               err = igt_flush_test(gt->i915);
+restore:
+               if (using_guc) {
+                       int err2 = intel_selftest_restore_policy(engine, &saved);
+
+                       if (err2)
+                               pr_err("%s:%d> [%s] Restore policy failed: %d!\n",
+                                      __func__, __LINE__, engine->name, err2);
+                       if (err == 0)
+                               err = err2;
+               }
                if (err)
+                       goto fini;
+
+               err = igt_flush_test(gt->i915);
+               if (err) {
+                       pr_err("[%s] Flush failed: %d!\n", engine->name, err);
                        break;
+               }
        }
 
 fini:
@@ -1653,12 +1823,15 @@ static int igt_handle_error(void *arg)
                return 0;
 
        err = hang_init(&h, gt);
-       if (err)
+       if (err) {
+               pr_err("[%s] Hang init failed: %d!\n", engine->name, err);
                return err;
+       }
 
        rq = hang_create_request(&h, engine);
        if (IS_ERR(rq)) {
                err = PTR_ERR(rq);
+               pr_err("[%s] Create hang request failed: %d!\n", engine->name, err);
                goto err_fini;
        }
 
@@ -1702,7 +1875,7 @@ static int __igt_atomic_reset_engine(struct intel_engine_cs *engine,
                                     const struct igt_atomic_section *p,
                                     const char *mode)
 {
-       struct tasklet_struct * const t = &engine->execlists.tasklet;
+       struct tasklet_struct * const t = &engine->sched_engine->tasklet;
        int err;
 
        GEM_TRACE("i915_reset_engine(%s:%s) under %s\n",
@@ -1743,12 +1916,15 @@ static int igt_atomic_reset_engine(struct intel_engine_cs *engine,
                return err;
 
        err = hang_init(&h, engine->gt);
-       if (err)
+       if (err) {
+               pr_err("[%s] Hang init failed: %d!\n", engine->name, err);
                return err;
+       }
 
        rq = hang_create_request(&h, engine);
        if (IS_ERR(rq)) {
                err = PTR_ERR(rq);
+               pr_err("[%s] Create hang request failed: %d!\n", engine->name, err);
                goto out;
        }