Re: [PATCH] drm/i915: Clear local engine-needs-reset bit if in progress elsewhere

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 28/08/17 12:25, jeff.mcgee@xxxxxxxxx wrote:
From: Jeff McGee <jeff.mcgee@xxxxxxxxx>

If someone else is resetting the engine we should clear our own bit as
part of skipping that engine. Otherwise we will later believe that it
has not been reset successfully and then trigger full gpu reset. If the
other guy's reset actually fails, he will trigger the full gpu reset.


Did you hit this by manually setting wedged to 'x' ring repeatedly?

Signed-off-by: Jeff McGee <jeff.mcgee@xxxxxxxxx>
---
  drivers/gpu/drm/i915/i915_irq.c | 4 +++-
  1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index 5d391e689070..575d618ccdbf 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -2711,8 +2711,10 @@ void i915_handle_error(struct drm_i915_private *dev_priv,
  		for_each_engine_masked(engine, dev_priv, engine_mask, tmp) {
  			BUILD_BUG_ON(I915_RESET_MODESET >= I915_RESET_ENGINE);
  			if (test_and_set_bit(I915_RESET_ENGINE + engine->id,
-					     &dev_priv->gpu_error.flags))
+					     &dev_priv->gpu_error.flags)) {
+				engine_mask &= ~intel_engine_flag(engine);
  				continue;
+			}
if (i915_reset_engine(engine, 0) == 0)
  				engine_mask &= ~intel_engine_flag(engine);


Reviewed-by: Michel Thierry <michel.thierry@xxxxxxxxx>
_______________________________________________
Intel-gfx mailing list
Intel-gfx@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/intel-gfx




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux