[RFC v5 5/8] drm/i915: Retire requests during reset prepare

Michal Wajdeczko michal.wajdeczko at intel.com
Mon Jan 14 13:18:49 UTC 2019


WIP v2

Signed-off-by: Michal Wajdeczko <michal.wajdeczko at intel.com>
---
 drivers/gpu/drm/i915/i915_gem.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index a4435a807e83..0f911f6039fa 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -2968,6 +2968,8 @@ int i915_gem_reset_prepare(struct drm_i915_private *dev_priv)
 	enum intel_engine_id id;
 	int err = 0;
 
+	lockdep_assert_held(&dev_priv->drm.struct_mutex);
+
 	for_each_engine(engine, dev_priv, id) {
 		request = i915_gem_reset_prepare_engine(engine);
 		if (IS_ERR(request)) {
@@ -2979,6 +2981,16 @@ int i915_gem_reset_prepare(struct drm_i915_private *dev_priv)
 	}
 
 	i915_gem_revoke_fences(dev_priv);
+	i915_retire_requests(dev_priv);
+
+	/*
+	 * We are idle; the idle-worker will be queued, but we need to run
+	 * it now. As we already hold the struct mutex, we can park the GPU
+	 * right away, letting the lazy worker see that we are already active
+	 * again by the time it acquires the mutex.
+	 */
+	__i915_gem_park(dev_priv);
+
 	intel_uc_sanitize(dev_priv);
 
 	return err;
-- 
2.19.2



More information about the Intel-gfx-trybot mailing list