if (!intel_engine_has_preemption(engine))
                        continue;
 
+               if (igt_flush_test(i915, I915_WAIT_LOCKED))
+                       goto err_wedged;
+
+               intel_engine_pm_get(engine);
                engine->execlists.preempt_hang.count = 0;
 
                rq_a = spinner_create_request(&a.spin,
                                              MI_NOOP);
                if (IS_ERR(rq_a)) {
                        err = PTR_ERR(rq_a);
+                       intel_engine_pm_put(engine);
                        goto err_client_b;
                }
 
                i915_request_add(rq_a);
                if (!igt_wait_for_spinner(&a.spin, rq_a)) {
                        pr_err("First client failed to start\n");
+                       intel_engine_pm_put(engine);
                        goto err_wedged;
                }
 
                                                      MI_NOOP);
                        if (IS_ERR(rq_b)) {
                                err = PTR_ERR(rq_b);
+                               intel_engine_pm_put(engine);
                                goto err_client_b;
                        }
                        i915_request_add(rq_b);
 
                        if (!igt_wait_for_spinner(&b.spin, rq_b)) {
                                pr_err("Second client failed to start\n");
+                               intel_engine_pm_put(engine);
                                goto err_wedged;
                        }
 
                               engine->name,
                               engine->execlists.preempt_hang.count,
                               depth);
+                       intel_engine_pm_put(engine);
                        err = -EINVAL;
                        goto err_client_b;
                }
 
+               intel_engine_pm_put(engine);
                if (igt_flush_test(i915, I915_WAIT_LOCKED))
                        goto err_wedged;
        }