From: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
To: Chris Wilson <chris@chris-wilson.co.uk>, intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH] drm/i915: Refactor golden render state emission to unconfuse gcc
Date: Fri, 22 Jul 2016 13:33:56 +0300 [thread overview]
Message-ID: <1469183636.5916.48.camel@linux.intel.com> (raw)
In-Reply-To: <1469182586-31422-1-git-send-email-chris@chris-wilson.co.uk>
On pe, 2016-07-22 at 11:16 +0100, Chris Wilson wrote:
> GCC was inlining the init and setup functions, but was getting itself
> confused into thinking that variables could be used uninitialised. If we
> do the inline for gcc, it is happy! As a bonus we shrink the code.
>
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
> ---
> drivers/gpu/drm/i915/i915_gem_render_state.c | 93 ++++++++--------------------
> 1 file changed, 26 insertions(+), 67 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_gem_render_state.c b/drivers/gpu/drm/i915/i915_gem_render_state.c
> index a9b56d18a93b..b50412c205e5 100644
> --- a/drivers/gpu/drm/i915/i915_gem_render_state.c
> +++ b/drivers/gpu/drm/i915/i915_gem_render_state.c
> @@ -32,7 +32,6 @@ struct render_state {
> const struct intel_renderstate_rodata *rodata;
> struct drm_i915_gem_object *obj;
> u64 ggtt_offset;
> - int gen;
> u32 aux_batch_size;
> u32 aux_batch_offset;
> };
> @@ -54,36 +53,6 @@ render_state_get_rodata(const int gen)
> return NULL;
> }
>
> -static int render_state_init(struct render_state *so,
> - struct drm_i915_private *dev_priv)
> -{
> - int ret;
> -
> - so->gen = INTEL_GEN(dev_priv);
> - so->ggtt_offset = 0; /* keep gcc quiet */
> - so->rodata = render_state_get_rodata(so->gen);
> - if (so->rodata == NULL)
> - return 0;
> -
> - if (so->rodata->batch_items * 4 > 4096)
> - return -EINVAL;
> -
> - so->obj = i915_gem_object_create(&dev_priv->drm, 4096);
> - if (IS_ERR(so->obj))
> - return PTR_ERR(so->obj);
> -
> - ret = i915_gem_obj_ggtt_pin(so->obj, 4096, 0);
> - if (ret)
> - goto free_gem;
> -
> - so->ggtt_offset = i915_gem_obj_ggtt_offset(so->obj);
> - return 0;
> -
> -free_gem:
> - i915_gem_object_put(so->obj);
> - return ret;
> -}
> -
> /*
> * Macro to add commands to auxiliary batch.
> * This macro only checks for page overflow before inserting the commands,
> @@ -106,6 +75,7 @@ static int render_state_setup(struct render_state *so)
> {
> struct drm_device *dev = so->obj->base.dev;
> const struct intel_renderstate_rodata *rodata = so->rodata;
> + const bool has_64bit_reloc = INTEL_GEN(dev) >= 8;
> unsigned int i = 0, reloc_index = 0;
> struct page *page;
> u32 *d;
> @@ -124,7 +94,7 @@ static int render_state_setup(struct render_state *so)
> if (i * 4 == rodata->reloc[reloc_index]) {
> u64 r = s + so->ggtt_offset;
> s = lower_32_bits(r);
> - if (so->gen >= 8) {
> + if (has_64bit_reloc) {
> if (i + 1 >= rodata->batch_items ||
> rodata->batch[i + 1] != 0) {
> ret = -EINVAL;
> @@ -202,53 +172,40 @@ err_out:
>
> #undef OUT_BATCH
>
> -static void render_state_fini(struct render_state *so)
> -{
> - i915_gem_object_ggtt_unpin(so->obj);
> - i915_gem_object_put(so->obj);
> -}
> -
> -static int render_state_prepare(struct intel_engine_cs *engine,
> - struct render_state *so)
> +int i915_gem_render_state_init(struct drm_i915_gem_request *req)
> {
> + struct render_state so;
> int ret;
>
> - if (WARN_ON(engine->id != RCS))
> - return -ENOENT;
> -
> - ret = render_state_init(so, engine->i915);
> - if (ret)
> - return ret;
> -
> - if (so->rodata == NULL)
> + if (WARN_ON(req->engine->id != RCS))
> return 0;
Why not -ENOENT anymore, it was propagated up previously.
>
> - ret = render_state_setup(so);
> - if (ret) {
> - render_state_fini(so);
> - return ret;
> - }
> + so.rodata = render_state_get_rodata(INTEL_GEN(req->i915));
While you revamp, maybe let the function take req->i915 directly?
Otherwise looks quite good.
> + if (so.rodata == NULL)
> + return 0;
>
>
> - return 0;
> -}
> + if (so.rodata->batch_items * 4 > 4096)
> + return -EINVAL;
>
> -int i915_gem_render_state_init(struct drm_i915_gem_request *req)
> -{
> - struct render_state so;
> - int ret;
> + so.obj = i915_gem_object_create(&req->i915->drm, 4096);
> + if (IS_ERR(so.obj))
> + return PTR_ERR(so.obj);
>
> - ret = render_state_prepare(req->engine, &so);
> + ret = i915_gem_obj_ggtt_pin(so.obj, 4096, 0);
> if (ret)
> - return ret;
> + goto err_obj;
>
> - if (so.rodata == NULL)
> - return 0;
> + so.ggtt_offset = i915_gem_obj_ggtt_offset(so.obj);
> +
> + ret = render_state_setup(&so);
> + if (ret)
> + goto err_unpin;
>
> ret = req->engine->emit_bb_start(req, so.ggtt_offset,
> so.rodata->batch_items * 4,
> I915_DISPATCH_SECURE);
> if (ret)
> - goto out;
> + goto err_unpin;
>
> if (so.aux_batch_size > 8) {
> ret = req->engine->emit_bb_start(req,
> @@ -257,11 +214,13 @@ int i915_gem_render_state_init(struct drm_i915_gem_request *req)
> so.aux_batch_size,
> I915_DISPATCH_SECURE);
> if (ret)
> - goto out;
> + goto err_unpin;
> }
>
> i915_vma_move_to_active(i915_gem_obj_to_ggtt(so.obj), req);
> -out:
> - render_state_fini(&so);
> +err_unpin:
> + i915_gem_object_ggtt_unpin(so.obj);
> +err_obj:
> + i915_gem_object_put(so.obj);
> return ret;
> }
--
Joonas Lahtinen
Open Source Technology Center
Intel Corporation
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2016-07-22 10:34 UTC|newest]
Thread overview: 72+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-07-20 13:11 Unify request construction Chris Wilson
2016-07-20 13:11 ` [PATCH 01/18] drm/i915: Unify intel_logical_ring_emit and intel_ring_emit Chris Wilson
2016-07-21 11:26 ` Joonas Lahtinen
2016-07-21 12:09 ` Chris Wilson
2016-07-20 13:11 ` [PATCH 02/18] drm/i915: Rename request->ringbuf to request->ring Chris Wilson
2016-07-20 14:12 ` Dave Gordon
2016-07-20 14:51 ` Dave Gordon
2016-07-20 15:00 ` [PATCH] drm/i915: Convert stray struct intel_engine_cs *ring Chris Wilson
2016-07-27 13:15 ` Dave Gordon
2016-07-21 11:28 ` [PATCH 02/18] drm/i915: Rename request->ringbuf to request->ring Joonas Lahtinen
2016-07-20 13:11 ` [PATCH 03/18] drm/i915: Rename backpointer from intel_ringbuffer to intel_engine_cs Chris Wilson
2016-07-20 14:23 ` Dave Gordon
2016-07-21 11:32 ` Joonas Lahtinen
2016-07-21 11:42 ` Chris Wilson
2016-07-20 13:11 ` [PATCH 04/18] drm/i915: Rename intel_context[engine].ringbuf Chris Wilson
2016-07-21 11:43 ` Joonas Lahtinen
2016-07-20 13:11 ` [PATCH 05/18] drm/i915: Rename struct intel_ringbuffer to struct intel_ring Chris Wilson
2016-07-21 11:59 ` Joonas Lahtinen
2016-07-21 16:02 ` Chris Wilson
2016-07-20 13:11 ` [PATCH 06/18] drm/i915: Rename residual ringbuf parameters Chris Wilson
2016-07-21 12:01 ` Joonas Lahtinen
2016-07-21 12:20 ` Chris Wilson
2016-07-20 13:11 ` [PATCH 07/18] drm/i915: Rename intel_pin_and_map_ring() Chris Wilson
2016-07-21 12:02 ` Joonas Lahtinen
2016-07-20 13:12 ` [PATCH 08/18] drm/i915: Remove obsolete engine->gpu_caches_dirty Chris Wilson
2016-07-20 13:12 ` [PATCH 09/18] drm/i915: Simplify request_alloc by returning the allocated request Chris Wilson
2016-07-21 13:07 ` Joonas Lahtinen
2016-07-21 13:18 ` Chris Wilson
2016-07-20 13:12 ` [PATCH 10/18] drm/i915: Unify legacy/execlists emission of MI_BATCHBUFFER_START Chris Wilson
2016-07-21 13:39 ` Joonas Lahtinen
2016-07-21 14:14 ` Chris Wilson
2016-07-27 15:04 ` Dave Gordon
2016-07-27 15:19 ` Chris Wilson
2016-07-20 13:12 ` [PATCH 11/18] drm/i915: Convert engine->write_tail to operate on a request Chris Wilson
2016-07-21 13:52 ` Joonas Lahtinen
2016-07-20 13:12 ` [PATCH 12/18] drm/i915: Unify request submission Chris Wilson
2016-07-22 8:03 ` Joonas Lahtinen
2016-07-22 8:24 ` Chris Wilson
2016-07-27 17:51 ` Dave Gordon
2016-07-27 18:09 ` Chris Wilson
2016-07-27 18:17 ` Chris Wilson
2016-07-28 10:25 ` Dave Gordon
2016-07-28 11:49 ` Daniel Vetter
2016-07-20 13:12 ` [PATCH 13/18] drm/i915: Stop passing caller's num_dwords to engine->semaphore.signal() Chris Wilson
2016-07-22 8:15 ` Joonas Lahtinen
2016-07-22 8:30 ` Chris Wilson
2016-07-22 9:06 ` Joonas Lahtinen
2016-07-20 13:12 ` [PATCH 14/18] drm/i915: Reuse legacy breadcrumbs + tail emission Chris Wilson
2016-07-22 8:34 ` Joonas Lahtinen
2016-07-20 13:12 ` [PATCH 15/18] drm/i915/ringbuffer: Specialise SNB+ request emission for semaphores Chris Wilson
2016-07-21 13:55 ` Joonas Lahtinen
2016-07-21 14:10 ` Chris Wilson
2016-07-22 9:42 ` Joonas Lahtinen
2016-07-20 13:12 ` [PATCH 16/18] drm/i915: Remove duplicate golden render state init from execlists Chris Wilson
2016-07-21 14:18 ` Joonas Lahtinen
2016-07-21 16:27 ` Chris Wilson
2016-07-21 16:37 ` Chris Wilson
2016-07-22 9:53 ` Joonas Lahtinen
2016-07-22 10:16 ` [PATCH] drm/i915: Refactor golden render state emission to unconfuse gcc Chris Wilson
2016-07-22 10:33 ` Joonas Lahtinen [this message]
2016-07-20 13:12 ` [PATCH 17/18] drm/i915: Unify legacy/execlists submit_execbuf callbacks Chris Wilson
2016-07-22 8:45 ` Joonas Lahtinen
2016-07-20 13:12 ` [PATCH 18/18] drm/i915: Simplify calling engine->sync_to Chris Wilson
2016-07-22 8:59 ` Joonas Lahtinen
2016-07-22 9:14 ` [PATCH] drm/i915: Rename engine->semaphore.sync_to, engine->sempahore.signal locals Chris Wilson
2016-07-22 9:28 ` Joonas Lahtinen
2016-07-22 9:31 ` Chris Wilson
2016-07-22 9:38 ` Joonas Lahtinen
2016-07-20 13:54 ` ✓ Ro.CI.BAT: success for series starting with [01/18] drm/i915: Unify intel_logical_ring_emit and intel_ring_emit Patchwork
2016-07-20 15:10 ` ✗ Ro.CI.BAT: failure for series starting with [01/18] drm/i915: Unify intel_logical_ring_emit and intel_ring_emit (rev2) Patchwork
2016-07-22 9:58 ` ✗ Ro.CI.BAT: failure for series starting with [01/18] drm/i915: Unify intel_logical_ring_emit and intel_ring_emit (rev4) Patchwork
2016-07-22 10:22 ` ✗ Ro.CI.BAT: failure for series starting with [01/18] drm/i915: Unify intel_logical_ring_emit and intel_ring_emit (rev5) Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1469183636.5916.48.camel@linux.intel.com \
--to=joonas.lahtinen@linux.intel.com \
--cc=chris@chris-wilson.co.uk \
--cc=intel-gfx@lists.freedesktop.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.