|
@@ -3376,24 +3376,12 @@ static int wait_for_timeline(struct i915_gem_timeline *tl, unsigned int flags)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int wait_for_engine(struct intel_engine_cs *engine, int timeout_ms)
|
|
|
-{
|
|
|
- return wait_for(intel_engine_is_idle(engine), timeout_ms);
|
|
|
-}
|
|
|
-
|
|
|
static int wait_for_engines(struct drm_i915_private *i915)
|
|
|
{
|
|
|
- struct intel_engine_cs *engine;
|
|
|
- enum intel_engine_id id;
|
|
|
-
|
|
|
- for_each_engine(engine, i915, id) {
|
|
|
- if (GEM_WARN_ON(wait_for_engine(engine, 50))) {
|
|
|
- i915_gem_set_wedged(i915);
|
|
|
- return -EIO;
|
|
|
- }
|
|
|
-
|
|
|
- GEM_BUG_ON(intel_engine_get_seqno(engine) !=
|
|
|
- intel_engine_last_submit(engine));
|
|
|
+ if (wait_for(intel_engines_are_idle(i915), 50)) {
|
|
|
+ DRM_ERROR("Failed to idle engines, declaring wedged!\n");
|
|
|
+ i915_gem_set_wedged(i915);
|
|
|
+ return -EIO;
|
|
|
}
|
|
|
|
|
|
return 0;
|
|
@@ -4574,7 +4562,7 @@ int i915_gem_suspend(struct drm_i915_private *dev_priv)
|
|
|
ret = i915_gem_wait_for_idle(dev_priv,
|
|
|
I915_WAIT_INTERRUPTIBLE |
|
|
|
I915_WAIT_LOCKED);
|
|
|
- if (ret)
|
|
|
+ if (ret && ret != -EIO)
|
|
|
goto err_unlock;
|
|
|
|
|
|
assert_kernel_context_is_current(dev_priv);
|
|
@@ -4618,11 +4606,12 @@ int i915_gem_suspend(struct drm_i915_private *dev_priv)
|
|
|
* machine in an unusable condition.
|
|
|
*/
|
|
|
i915_gem_sanitize(dev_priv);
|
|
|
- goto out_rpm_put;
|
|
|
+
|
|
|
+ intel_runtime_pm_put(dev_priv);
|
|
|
+ return 0;
|
|
|
|
|
|
err_unlock:
|
|
|
mutex_unlock(&dev->struct_mutex);
|
|
|
-out_rpm_put:
|
|
|
intel_runtime_pm_put(dev_priv);
|
|
|
return ret;
|
|
|
}
|