drm/i915/selftests: Serialise nop reset with retirement
authorChris Wilson <chris@chris-wilson.co.uk>
Wed, 26 Jun 2019 13:44:31 +0000 (14:44 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Wed, 26 Jun 2019 15:03:13 +0000 (16:03 +0100)
In order for the reset count to be accurate across our selftest, we need
to prevent the background retire worker from modifying our expected
state. To preserve the intent of symmetry, we apply this to both
i915_reset and i915_reset_engine, even though it strictly only affects
i915_reset_engine currently.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190626134433.6318-1-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/gt/selftest_hangcheck.c

index 3ceb397c8645dee216fc18c1858da23373b88a09..0e0b6c572ae9ed0b481b02c0c35506e26c465f5c 100644 (file)
@@ -398,6 +398,7 @@ static int igt_reset_nop(void *arg)
        count = 0;
        do {
                mutex_lock(&i915->drm.struct_mutex);
+
                for_each_engine(engine, i915, id) {
                        int i;
 
@@ -413,11 +414,12 @@ static int igt_reset_nop(void *arg)
                                i915_request_add(rq);
                        }
                }
-               mutex_unlock(&i915->drm.struct_mutex);
 
                igt_global_reset_lock(i915);
                i915_reset(i915, ALL_ENGINES, NULL);
                igt_global_reset_unlock(i915);
+
+               mutex_unlock(&i915->drm.struct_mutex);
                if (i915_reset_failed(i915)) {
                        err = -EIO;
                        break;
@@ -511,9 +513,8 @@ static int igt_reset_nop_engine(void *arg)
 
                                i915_request_add(rq);
                        }
-                       mutex_unlock(&i915->drm.struct_mutex);
-
                        err = i915_reset_engine(engine, NULL);
+                       mutex_unlock(&i915->drm.struct_mutex);
                        if (err) {
                                pr_err("i915_reset_engine failed\n");
                                break;