diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2019-04-26 17:33:33 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2019-04-26 18:32:07 +0100 |
commit | 11334c6aad9500a9d3b9b48dd0a4bb6406eb88fb (patch) | |
tree | 68b72ab6692e03a3f3b026386e67843677793bdc /drivers/gpu/drm/i915/gt/mock_engine.c | |
parent | drm/i915: Pass intel_context to intel_context_pin_lock() (diff) | |
download | linux-dev-11334c6aad9500a9d3b9b48dd0a4bb6406eb88fb.tar.xz linux-dev-11334c6aad9500a9d3b9b48dd0a4bb6406eb88fb.zip |
drm/i915: Split engine setup/init into two phases
In the next patch, we require the engine vfuncs setup prior to
initialising the pinned kernel contexts, so split the vfunc setup from
the engine initialisation and call it earlier.
v2: s/setup_xcs/setup_common/ for intel_ring_submission_setup()
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190426163336.15906-6-chris@chris-wilson.co.uk
Diffstat (limited to 'drivers/gpu/drm/i915/gt/mock_engine.c')
-rw-r--r-- | drivers/gpu/drm/i915/gt/mock_engine.c | 48 |
1 files changed, 27 insertions, 21 deletions
diff --git a/drivers/gpu/drm/i915/gt/mock_engine.c b/drivers/gpu/drm/i915/gt/mock_engine.c index 21f413ff5b8e..85cdbfe1d989 100644 --- a/drivers/gpu/drm/i915/gt/mock_engine.c +++ b/drivers/gpu/drm/i915/gt/mock_engine.c @@ -239,7 +239,6 @@ struct intel_engine_cs *mock_engine(struct drm_i915_private *i915, int id) { struct mock_engine *engine; - int err; GEM_BUG_ON(id >= I915_NUM_ENGINES); @@ -265,37 +264,44 @@ struct intel_engine_cs *mock_engine(struct drm_i915_private *i915, engine->base.reset.finish = mock_reset_finish; engine->base.cancel_requests = mock_cancel_requests; - if (i915_timeline_init(i915, &engine->base.timeline, NULL)) - goto err_free; - i915_timeline_set_subclass(&engine->base.timeline, TIMELINE_ENGINE); - - intel_engine_init_breadcrumbs(&engine->base); - intel_engine_init_execlists(&engine->base); - intel_engine_init__pm(&engine->base); - /* fake hw queue */ spin_lock_init(&engine->hw_lock); timer_setup(&engine->hw_delay, hw_delay_complete, 0); INIT_LIST_HEAD(&engine->hw_queue); - engine->base.kernel_context = - intel_context_instance(i915->kernel_context, &engine->base); - if (IS_ERR(engine->base.kernel_context)) + return &engine->base; +} + +int mock_engine_init(struct intel_engine_cs *engine) +{ + struct drm_i915_private *i915 = engine->i915; + int err; + + intel_engine_init_breadcrumbs(engine); + intel_engine_init_execlists(engine); + intel_engine_init__pm(engine); + + if (i915_timeline_init(i915, &engine->timeline, NULL)) goto err_breadcrumbs; + i915_timeline_set_subclass(&engine->timeline, TIMELINE_ENGINE); + + engine->kernel_context = + intel_context_instance(i915->kernel_context, engine); + if (IS_ERR(engine->kernel_context)) + goto err_timeline; - err = intel_context_pin(engine->base.kernel_context); - intel_context_put(engine->base.kernel_context); + err = intel_context_pin(engine->kernel_context); + intel_context_put(engine->kernel_context); if (err) - goto err_breadcrumbs; + goto err_timeline; - return &engine->base; + return 0; +err_timeline: + i915_timeline_fini(&engine->timeline); err_breadcrumbs: - intel_engine_fini_breadcrumbs(&engine->base); - i915_timeline_fini(&engine->base.timeline); -err_free: - kfree(engine); - return NULL; + intel_engine_fini_breadcrumbs(engine); + return -ENOMEM; } void mock_engine_flush(struct intel_engine_cs *engine) |