__i915_add_request(rq, true);
 
        if (!wait_for_hang(&h, rq)) {
-               pr_err("Failed to start request %x\n", rq->fence.seqno);
+               pr_err("Failed to start request %x, at %x\n",
+                      rq->fence.seqno, hws_seqno(&h, rq));
+
+               i915_reset(i915, 0);
+               i915_gem_set_wedged(i915);
+
                err = -EIO;
                goto out_rq;
        }
                        __i915_add_request(rq, true);
 
                        if (!wait_for_hang(&h, prev)) {
-                               pr_err("Failed to start request %x\n",
-                                      prev->fence.seqno);
+                               pr_err("Failed to start request %x, at %x\n",
+                                      prev->fence.seqno, hws_seqno(&h, prev));
                                i915_gem_request_put(rq);
                                i915_gem_request_put(prev);
+
+                               i915_reset(i915, 0);
+                               i915_gem_set_wedged(i915);
+
                                err = -EIO;
                                goto fini;
                        }
        __i915_add_request(rq, true);
 
        if (!wait_for_hang(&h, rq)) {
-               pr_err("Failed to start request %x\n", rq->fence.seqno);
+               pr_err("Failed to start request %x, at %x\n",
+                      rq->fence.seqno, hws_seqno(&h, rq));
+
+               i915_reset(i915, 0);
+               i915_gem_set_wedged(i915);
+
                err = -EIO;
                goto err_request;
        }
 int intel_hangcheck_live_selftests(struct drm_i915_private *i915)
 {
        static const struct i915_subtest tests[] = {
+               SUBTEST(igt_global_reset), /* attempt to recover GPU first */
                SUBTEST(igt_hang_sanitycheck),
-               SUBTEST(igt_global_reset),
                SUBTEST(igt_reset_engine),
                SUBTEST(igt_reset_active_engines),
                SUBTEST(igt_wait_reset),