From mboxrd@z Thu Jan 1 00:00:00 1970 From: oscar.mateo@intel.com Subject: [PATCH 49/53] drm/i915: Extract render state preparation Date: Fri, 13 Jun 2014 16:38:07 +0100 Message-ID: <1402673891-14618-50-git-send-email-oscar.mateo@intel.com> References: <1402673891-14618-1-git-send-email-oscar.mateo@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id B3F1E6EA89 for ; Fri, 13 Jun 2014 08:43:41 -0700 (PDT) In-Reply-To: <1402673891-14618-1-git-send-email-oscar.mateo@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org From: Oscar Mateo Execlists need a new submission mechanism, so split the preparation from the submission. Signed-off-by: Oscar Mateo --- 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