[PATCH 2/2] reset-kernel-context
Chris Wilson
chris at chris-wilson.co.uk
Fri Dec 15 22:08:43 UTC 2017
---
drivers/gpu/drm/i915/i915_drv.c | 5 +++++
drivers/gpu/drm/i915/i915_gem.c | 16 +++++++++++++++-
2 files changed, 20 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index ca9f4b2862eb..dc6f3ab72417 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -2024,6 +2024,11 @@ int i915_reset_engine(struct intel_engine_cs *engine, unsigned int flags)
goto out;
}
+ if (!IS_ERR(active_request)) {
+ ret = -EIO;
+ goto out;
+ }
+
if (!engine->i915->guc.execbuf_client)
ret = intel_gt_reset_engine(engine->i915, engine);
else
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 4a7f5579a7a5..74d5b77ac584 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -3146,10 +3146,24 @@ void i915_gem_reset_finish(struct drm_i915_private *dev_priv)
lockdep_assert_held(&dev_priv->drm.struct_mutex);
+ intel_uncore_forcewake_get(dev_priv, FORCEWAKE_ALL);
+
for_each_engine(engine, dev_priv, id) {
- engine->hangcheck.active_request = NULL;
+ struct drm_i915_gem_request *rq;
+
i915_gem_reset_finish_engine(engine);
+ if (fetch_and_zero(&engine->hangcheck.active_request))
+ continue;
+
+ if (i915_terminally_wedged(&dev_priv->gpu_error))
+ continue;
+
+ rq = i915_gem_request_alloc(engine, dev_priv->kernel_context);
+ if (!IS_ERR(rq))
+ __i915_add_request(rq, false);
}
+
+ intel_uncore_forcewake_put(dev_priv, FORCEWAKE_ALL);
}
static void nop_submit_request(struct drm_i915_gem_request *request)
--
2.15.1
More information about the Intel-gfx-trybot
mailing list