Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 33def1ff authored by Tvrtko Ursulin's avatar Tvrtko Ursulin
Browse files

drm/i915: Simplify intel_engines_init



We do not want to carry on over missing constructors and don't
need a duplicated engine mask checking which is already done
in the setup phase.

Signed-off-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
parent 1f588aeb
Loading
Loading
Loading
Loading
+12 −24
Original line number Diff line number Diff line
@@ -291,11 +291,9 @@ int intel_engines_init_mmio(struct drm_i915_private *dev_priv)
 */
int intel_engines_init(struct drm_i915_private *dev_priv)
{
	struct intel_device_info *device_info = mkwrite_device_info(dev_priv);
	struct intel_engine_cs *engine;
	enum intel_engine_id id, err_id;
	unsigned int mask = 0;
	int err = 0;
	int err;

	for_each_engine(engine, dev_priv, id) {
		const struct engine_class_info *class_info =
@@ -306,41 +304,31 @@ int intel_engines_init(struct drm_i915_private *dev_priv)
			init = class_info->init_execlists;
		else
			init = class_info->init_legacy;
		if (!init) {
			kfree(engine);
			dev_priv->engine[id] = NULL;
			continue;
		}

		err = init(engine);
		if (err) {
		err = -EINVAL;
		err_id = id;

		if (GEM_WARN_ON(!init))
			goto cleanup;

		err = init(engine);
		if (err)
			goto cleanup;
		}

		GEM_BUG_ON(!engine->submit_request);
		mask |= ENGINE_MASK(id);
	}

	/*
	 * Catch failures to update intel_engines table when the new engines
	 * are added to the driver by a warning and disabling the forgotten
	 * engines.
	 */
	if (WARN_ON(mask != INTEL_INFO(dev_priv)->ring_mask))
		device_info->ring_mask = mask;

	device_info->num_rings = hweight32(mask);

	return 0;

cleanup:
	for_each_engine(engine, dev_priv, id) {
		if (id >= err_id)
		if (id >= err_id) {
			kfree(engine);
		else
			dev_priv->engine[id] = NULL;
		} else {
			dev_priv->gt.cleanup_engine(engine);
		}
	}
	return err;
}