From: Oscar Mateo <oscar.mateo@xxxxxxxxx> Execlists need a new submission mechanism, so split the preparation from the submission. Signed-off-by: Oscar Mateo <oscar.mateo@xxxxxxxxx> --- drivers/gpu/drm/i915/i915_gem_render_state.c | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_gem_render_state.c b/drivers/gpu/drm/i915/i915_gem_render_state.c index 3521f99..5944c0a 100644 --- a/drivers/gpu/drm/i915/i915_gem_render_state.c +++ b/drivers/gpu/drm/i915/i915_gem_render_state.c @@ -159,7 +159,8 @@ static int render_state_setup(const int gen, return 0; } -int i915_gem_render_state_init(struct intel_engine_cs *ring) +static struct i915_render_state * +render_state_prepare(struct intel_engine_cs *ring) { const int gen = INTEL_INFO(ring->dev)->gen; struct i915_render_state *so; @@ -167,19 +168,33 @@ int i915_gem_render_state_init(struct intel_engine_cs *ring) int ret; if (WARN_ON(ring->id != RCS)) - return -ENOENT; + return ERR_PTR(-ENOENT); rodata = render_state_get_rodata(ring->dev, gen); if (rodata == NULL) - return 0; + return NULL; so = render_state_alloc(ring->dev); if (IS_ERR(so)) - return PTR_ERR(so); + return so; ret = render_state_setup(gen, rodata, so); - if (ret) - goto out; + if (ret) { + render_state_free(so); + return ERR_PTR(ret); + } + + return so; +} + +int i915_gem_render_state_init(struct intel_engine_cs *ring) +{ + struct i915_render_state *so; + int ret; + + so = render_state_prepare(ring); + if (IS_ERR_OR_NULL(so)) + return PTR_ERR(so); ret = ring->dispatch_execbuffer(ring, i915_gem_obj_ggtt_offset(so->obj), -- 1.9.0 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx