drm/i915: Wait for old resets before applying debugfs/i915_wedged
authorChris Wilson <chris@chris-wilson.co.uk>
Fri, 8 Feb 2019 15:37:06 +0000 (15:37 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Fri, 8 Feb 2019 16:47:38 +0000 (16:47 +0000)
Since we use the debugfs to recover the device after modifying the
i915.reset parameter, we need to be sure that we apply the reset and not
piggy-back onto a concurrent one in order for the parameter to take
effect.

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

index 98a793d047ec7b4297ff10454687f38cbf385ab9..4c4876967cd63ac287db9c2b7ca44e6c4286e03c 100644 (file)
@@ -3861,13 +3861,9 @@ i915_wedged_set(void *data, u64 val)
 {
        struct drm_i915_private *i915 = data;
 
-       /*
-        * There is no safeguard against this debugfs entry colliding
-        * with the hangcheck calling same i915_handle_error() in
-        * parallel, causing an explosion. For now we assume that the
-        * test harness is responsible enough not to inject gpu hangs
-        * while it is writing to 'i915_wedged'
-        */
+       /* Flush any previous reset before applying for a new one */
+       wait_event(i915->gpu_error.reset_queue,
+                  !test_bit(I915_RESET_BACKOFF, &i915->gpu_error.flags));
 
        i915_handle_error(i915, val, I915_ERROR_CAPTURE,
                          "Manually set wedged engine mask = %llx", val);