Commit 8571a05a authored by Chris Wilson's avatar Chris Wilson

drm/i915: Use GEM suspend when aborting initialisation

As part of our GEM initialisation now, we send a request to the hardware
in order to record the initial GPU state. This coupled with deferred
idle workers, makes aborting on error tricky. We already have the
mechanism in place to wait on the GPU and cancel all the deferred
workers for suspend, so let's reuse it during the error teardown. It is
already used in places for later init error handling, but doing so at
this point is slightly ugly due to the mutex dance (it's ok, the module
load is still single threaded).

Testcase: igt/drv_module_reload/basic-reload-inject
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Cc: Michał Winiarski <michal.winiarski@intel.com>
Reviewed-by: default avatarMichał Winiarski <michal.winiarski@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180606145441.4460-1-chris@chris-wilson.co.uk
parent 14c3f842
...@@ -5514,8 +5514,12 @@ int i915_gem_init(struct drm_i915_private *dev_priv) ...@@ -5514,8 +5514,12 @@ int i915_gem_init(struct drm_i915_private *dev_priv)
* driver doesn't explode during runtime. * driver doesn't explode during runtime.
*/ */
err_init_hw: err_init_hw:
i915_gem_wait_for_idle(dev_priv, I915_WAIT_LOCKED); mutex_unlock(&dev_priv->drm.struct_mutex);
i915_gem_contexts_lost(dev_priv);
WARN_ON(i915_gem_suspend(dev_priv));
i915_gem_suspend_late(dev_priv);
mutex_lock(&dev_priv->drm.struct_mutex);
intel_uc_fini_hw(dev_priv); intel_uc_fini_hw(dev_priv);
err_uc_init: err_uc_init:
intel_uc_fini(dev_priv); intel_uc_fini(dev_priv);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment