|
@@ -2752,6 +2752,13 @@ i915_gem_idle_work_handler(struct work_struct *work)
|
|
if (!READ_ONCE(dev_priv->gt.awake))
|
|
if (!READ_ONCE(dev_priv->gt.awake))
|
|
return;
|
|
return;
|
|
|
|
|
|
|
|
+ /*
|
|
|
|
+ * Wait for last execlists context complete, but bail out in case a
|
|
|
|
+ * new request is submitted.
|
|
|
|
+ */
|
|
|
|
+ wait_for(READ_ONCE(dev_priv->gt.active_requests) ||
|
|
|
|
+ intel_execlists_idle(dev_priv), 10);
|
|
|
|
+
|
|
if (READ_ONCE(dev_priv->gt.active_requests))
|
|
if (READ_ONCE(dev_priv->gt.active_requests))
|
|
return;
|
|
return;
|
|
|
|
|
|
@@ -2776,6 +2783,9 @@ i915_gem_idle_work_handler(struct work_struct *work)
|
|
if (dev_priv->gt.active_requests)
|
|
if (dev_priv->gt.active_requests)
|
|
goto out_unlock;
|
|
goto out_unlock;
|
|
|
|
|
|
|
|
+ if (wait_for(intel_execlists_idle(dev_priv), 10))
|
|
|
|
+ DRM_ERROR("Timeout waiting for engines to idle\n");
|
|
|
|
+
|
|
for_each_engine(engine, dev_priv, id)
|
|
for_each_engine(engine, dev_priv, id)
|
|
i915_gem_batch_pool_fini(&engine->batch_pool);
|
|
i915_gem_batch_pool_fini(&engine->batch_pool);
|
|
|
|
|