Commit 78427933 authored by Chris Wilson's avatar Chris Wilson
Browse files

drm/i915: Drop struct_mutex from around GEM initialisation



We no longer need to placate lockdep by holding struct_mutex for our
initialisation, so don't.

Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20191004134015.13204-21-chris@chris-wilson.co.uk
parent 2af40298
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -174,7 +174,6 @@ void i915_gem_resume(struct drm_i915_private *i915)
{
	GEM_TRACE("\n");

	mutex_lock(&i915->drm.struct_mutex);
	intel_uncore_forcewake_get(&i915->uncore, FORCEWAKE_ALL);

	if (intel_gt_init_hw(&i915->gt))
@@ -198,7 +197,6 @@ void i915_gem_resume(struct drm_i915_private *i915)

out_unlock:
	intel_uncore_forcewake_put(&i915->uncore, FORCEWAKE_ALL);
	mutex_unlock(&i915->drm.struct_mutex);
	return;

err_wedged:
+0 −9
Original line number Diff line number Diff line
@@ -1249,7 +1249,6 @@ int i915_gem_init(struct drm_i915_private *dev_priv)
	 * we hold the forcewake during initialisation these problems
	 * just magically go away.
	 */
	mutex_lock(&dev_priv->drm.struct_mutex);
	intel_uncore_forcewake_get(&dev_priv->uncore, FORCEWAKE_ALL);

	ret = i915_init_ggtt(dev_priv);
@@ -1319,7 +1318,6 @@ int i915_gem_init(struct drm_i915_private *dev_priv)
		goto err_gt;

	intel_uncore_forcewake_put(&dev_priv->uncore, FORCEWAKE_ALL);
	mutex_unlock(&dev_priv->drm.struct_mutex);

	return 0;

@@ -1330,15 +1328,11 @@ int i915_gem_init(struct drm_i915_private *dev_priv)
	 * driver doesn't explode during runtime.
	 */
err_gt:
	mutex_unlock(&dev_priv->drm.struct_mutex);

	intel_gt_set_wedged_on_init(&dev_priv->gt);
	i915_gem_suspend(dev_priv);
	i915_gem_suspend_late(dev_priv);

	i915_gem_drain_workqueue(dev_priv);

	mutex_lock(&dev_priv->drm.struct_mutex);
err_init_hw:
	intel_uc_fini_hw(&dev_priv->gt.uc);
err_uc_init:
@@ -1353,7 +1347,6 @@ err_scratch:
	intel_gt_driver_release(&dev_priv->gt);
err_unlock:
	intel_uncore_forcewake_put(&dev_priv->uncore, FORCEWAKE_ALL);
	mutex_unlock(&dev_priv->drm.struct_mutex);

	if (ret != -EIO) {
		intel_uc_cleanup_firmwares(&dev_priv->gt.uc);
@@ -1406,10 +1399,8 @@ void i915_gem_driver_remove(struct drm_i915_private *dev_priv)
	/* Flush any outstanding unpin_work. */
	i915_gem_drain_workqueue(dev_priv);

	mutex_lock(&dev_priv->drm.struct_mutex);
	intel_uc_fini_hw(&dev_priv->gt.uc);
	intel_uc_fini(&dev_priv->gt.uc);
	mutex_unlock(&dev_priv->drm.struct_mutex);

	i915_gem_drain_freed_objects(dev_priv);
}
+0 −7
Original line number Diff line number Diff line
@@ -68,10 +68,7 @@ static void mock_device_release(struct drm_device *dev)
	drain_workqueue(i915->wq);
	i915_gem_drain_freed_objects(i915);

	mutex_lock(&i915->drm.struct_mutex);
	mock_fini_ggtt(&i915->ggtt);
	mutex_unlock(&i915->drm.struct_mutex);

	destroy_workqueue(i915->wq);

	i915_gemfs_fini(i915);
@@ -179,8 +176,6 @@ struct drm_i915_private *mock_gem_device(void)

	intel_timelines_init(i915);

	mutex_lock(&i915->drm.struct_mutex);

	mock_init_ggtt(i915, &i915->ggtt);

	mkwrite_device_info(i915)->engine_mask = BIT(0);
@@ -197,7 +192,6 @@ struct drm_i915_private *mock_gem_device(void)
		goto err_context;

	intel_engines_driver_register(i915);
	mutex_unlock(&i915->drm.struct_mutex);

	WARN_ON(i915_gemfs_init(i915));

@@ -208,7 +202,6 @@ err_context:
err_engine:
	mock_engine_free(i915->engine[RCS0]);
err_unlock:
	mutex_unlock(&i915->drm.struct_mutex);
	intel_timelines_fini(i915);
	destroy_workqueue(i915->wq);
err_drv: