From: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
To: Chris Wilson <chris@chris-wilson.co.uk>, intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 10/18] drm/i915: Unify legacy/execlists emission of MI_BATCHBUFFER_START
Date: Thu, 21 Jul 2016 16:39:58 +0300 [thread overview]
Message-ID: <1469108398.4821.27.camel@linux.intel.com> (raw)
In-Reply-To: <1469020330-1071-11-git-send-email-chris@chris-wilson.co.uk>
On ke, 2016-07-20 at 14:12 +0100, Chris Wilson wrote:
> Both the ->dispatch_execbuffer and ->emit_bb_start callbacks do exactly
> the same thing, add MI_BATCHBUFFER_START to the request's ringbuffer -
> we need only one vfunc.
>
Some ranting below,
Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> ---
> drivers/gpu/drm/i915/i915_gem_execbuffer.c | 6 ++--
> drivers/gpu/drm/i915/i915_gem_render_state.c | 16 +++++-----
> drivers/gpu/drm/i915/intel_lrc.c | 15 ++++++---
> drivers/gpu/drm/i915/intel_ringbuffer.c | 48 ++++++++++++++--------------
> drivers/gpu/drm/i915/intel_ringbuffer.h | 12 +++----
> 5 files changed, 50 insertions(+), 47 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
> index 5cea95c6f98b..2d9f1f4bc058 100644
> --- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
> +++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
> @@ -1326,9 +1326,9 @@ i915_gem_ringbuffer_submission(struct i915_execbuffer_params *params,
> if (exec_len == 0)
> exec_len = params->batch_obj->base.size;
>
> - ret = params->engine->dispatch_execbuffer(params->request,
> - exec_start, exec_len,
> - params->dispatch_flags);
> + ret = params->engine->emit_bb_start(params->request,
> + exec_start, exec_len,
> + params->dispatch_flags);
> if (ret)
> return ret;
>
> diff --git a/drivers/gpu/drm/i915/i915_gem_render_state.c b/drivers/gpu/drm/i915/i915_gem_render_state.c
> index b2be4676a5cf..2ba759f3ab6f 100644
> --- a/drivers/gpu/drm/i915/i915_gem_render_state.c
> +++ b/drivers/gpu/drm/i915/i915_gem_render_state.c
> @@ -234,18 +234,18 @@ int i915_gem_render_state_init(struct drm_i915_gem_request *req)
> if (so.rodata == NULL)
> return 0;
>
> - ret = req->engine->dispatch_execbuffer(req, so.ggtt_offset,
> - so.rodata->batch_items * 4,
> - I915_DISPATCH_SECURE);
> + ret = req->engine->emit_bb_start(req, so.ggtt_offset,
> + so.rodata->batch_items * 4,
> + I915_DISPATCH_SECURE);
> if (ret)
> goto out;
>
> if (so.aux_batch_size > 8) {
> - ret = req->engine->dispatch_execbuffer(req,
> - (so.ggtt_offset +
> - so.aux_batch_offset),
> - so.aux_batch_size,
> - I915_DISPATCH_SECURE);
> + ret = req->engine->emit_bb_start(req,
> + (so.ggtt_offset +
> + so.aux_batch_offset),
> + so.aux_batch_size,
> + I915_DISPATCH_SECURE);
> if (ret)
> goto out;
> }
The code above this line is exact reason why I don't like the a->b->c
(especially when there is repetition). But it's not new to this patch
so guess it'll do. Some future work to shorten down a little bit might
not hurt.
> diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
> index 6cd0e24ed50c..d17a193e8eaf 100644
> --- a/drivers/gpu/drm/i915/intel_lrc.c
> +++ b/drivers/gpu/drm/i915/intel_lrc.c
> @@ -859,7 +859,9 @@ int intel_execlists_submission(struct i915_execbuffer_params *params,
> exec_start = params->batch_obj_vm_offset +
> args->batch_start_offset;
>
> - ret = engine->emit_bb_start(params->request, exec_start, params->dispatch_flags);
> + ret = engine->emit_bb_start(params->request,
> + exec_start, args->batch_len,
> + params->dispatch_flags);
> if (ret)
> return ret;
>
> @@ -1535,7 +1537,8 @@ static int intel_logical_ring_emit_pdps(struct drm_i915_gem_request *req)
> }
>
> static int gen8_emit_bb_start(struct drm_i915_gem_request *req,
> - u64 offset, unsigned dispatch_flags)
> + u64 offset, u32 len,
> + unsigned int dispatch_flags)
> {
> struct intel_ring *ring = req->ring;
> bool ppgtt = !(dispatch_flags & I915_DISPATCH_SECURE);
> @@ -1811,13 +1814,15 @@ static int intel_lr_context_render_state_init(struct drm_i915_gem_request *req)
> return 0;
>
> ret = req->engine->emit_bb_start(req, so.ggtt_offset,
> - I915_DISPATCH_SECURE);
> + so.rodata->batch_items * 4,
> + I915_DISPATCH_SECURE);
> if (ret)
> goto out;
>
> ret = req->engine->emit_bb_start(req,
> - (so.ggtt_offset + so.aux_batch_offset),
> - I915_DISPATCH_SECURE);
> + (so.ggtt_offset + so.aux_batch_offset),
> + so.aux_batch_size,
> + I915_DISPATCH_SECURE);
> if (ret)
> goto out;
>
> diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
> index 6aa1657bbc9d..4488db485fa4 100644
> --- a/drivers/gpu/drm/i915/intel_ringbuffer.c
> +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
> @@ -1779,9 +1779,9 @@ gen8_irq_disable(struct intel_engine_cs *engine)
> }
>
> static int
> -i965_dispatch_execbuffer(struct drm_i915_gem_request *req,
> - u64 offset, u32 length,
> - unsigned dispatch_flags)
> +i965_emit_bb_start(struct drm_i915_gem_request *req,
> + u64 offset, u32 length,
> + unsigned int dispatch_flags)
> {
> struct intel_ring *ring = req->ring;
> int ret;
> @@ -1806,9 +1806,9 @@ i965_dispatch_execbuffer(struct drm_i915_gem_request *req,
> #define I830_TLB_ENTRIES (2)
> #define I830_WA_SIZE max(I830_TLB_ENTRIES*4096, I830_BATCH_LIMIT)
> static int
> -i830_dispatch_execbuffer(struct drm_i915_gem_request *req,
> - u64 offset, u32 len,
> - unsigned dispatch_flags)
> +i830_emit_bb_start(struct drm_i915_gem_request *req,
> + u64 offset, u32 len,
> + unsigned int dispatch_flags)
> {
> struct intel_ring *ring = req->ring;
> u32 cs_offset = req->engine->scratch.gtt_offset;
> @@ -1868,9 +1868,9 @@ i830_dispatch_execbuffer(struct drm_i915_gem_request *req,
> }
>
> static int
> -i915_dispatch_execbuffer(struct drm_i915_gem_request *req,
> - u64 offset, u32 len,
> - unsigned dispatch_flags)
> +i915_emit_bb_start(struct drm_i915_gem_request *req,
> + u64 offset, u32 len,
> + unsigned int dispatch_flags)
> {
> struct intel_ring *ring = req->ring;
> int ret;
> @@ -2563,9 +2563,9 @@ static int gen6_bsd_ring_flush(struct drm_i915_gem_request *req,
> }
>
> static int
> -gen8_ring_dispatch_execbuffer(struct drm_i915_gem_request *req,
> - u64 offset, u32 len,
> - unsigned dispatch_flags)
> +gen8_emit_bb_start(struct drm_i915_gem_request *req,
> + u64 offset, u32 len,
> + unsigned int dispatch_flags)
> {
> struct intel_ring *ring = req->ring;
> bool ppgtt = USES_PPGTT(req->i915) &&
> @@ -2589,9 +2589,9 @@ gen8_ring_dispatch_execbuffer(struct drm_i915_gem_request *req,
> }
>
> static int
> -hsw_ring_dispatch_execbuffer(struct drm_i915_gem_request *req,
> - u64 offset, u32 len,
> - unsigned dispatch_flags)
> +hsw_emit_bb_start(struct drm_i915_gem_request *req,
> + u64 offset, u32 len,
> + unsigned int dispatch_flags)
> {
> struct intel_ring *ring = req->ring;
> int ret;
> @@ -2614,9 +2614,9 @@ hsw_ring_dispatch_execbuffer(struct drm_i915_gem_request *req,
> }
>
> static int
> -gen6_ring_dispatch_execbuffer(struct drm_i915_gem_request *req,
> - u64 offset, u32 len,
> - unsigned dispatch_flags)
> +gen6_emit_bb_start(struct drm_i915_gem_request *req,
> + u64 offset, u32 len,
> + unsigned int dispatch_flags)
> {
> struct intel_ring *ring = req->ring;
> int ret;
> @@ -2820,15 +2820,15 @@ static void intel_ring_default_vfuncs(struct drm_i915_private *dev_priv,
> engine->add_request = gen6_add_request;
>
> if (INTEL_GEN(dev_priv) >= 8)
> - engine->dispatch_execbuffer = gen8_ring_dispatch_execbuffer;
> + engine->emit_bb_start = gen8_emit_bb_start;
> else if (INTEL_GEN(dev_priv) >= 6)
> - engine->dispatch_execbuffer = gen6_ring_dispatch_execbuffer;
> + engine->emit_bb_start = gen6_emit_bb_start;
> else if (INTEL_GEN(dev_priv) >= 4)
> - engine->dispatch_execbuffer = i965_dispatch_execbuffer;
> + engine->emit_bb_start = i965_emit_bb_start;
> else if (IS_I830(dev_priv) || IS_845G(dev_priv))
> - engine->dispatch_execbuffer = i830_dispatch_execbuffer;
> + engine->emit_bb_start = i830_emit_bb_start;
> else
> - engine->dispatch_execbuffer = i915_dispatch_execbuffer;
> + engine->emit_bb_start = i915_emit_bb_start;
>
> intel_ring_init_irq(dev_priv, engine);
> intel_ring_init_semaphores(dev_priv, engine);
> @@ -2866,7 +2866,7 @@ int intel_init_render_ring_buffer(struct intel_engine_cs *engine)
> }
>
> if (IS_HASWELL(dev_priv))
> - engine->dispatch_execbuffer = hsw_ring_dispatch_execbuffer;
> + engine->emit_bb_start = hsw_emit_bb_start;
>
> engine->init_hw = init_render_ring;
> engine->cleanup = render_ring_cleanup;
> diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.h b/drivers/gpu/drm/i915/intel_ringbuffer.h
> index 49500cead7a5..85d6a70554b9 100644
> --- a/drivers/gpu/drm/i915/intel_ringbuffer.h
> +++ b/drivers/gpu/drm/i915/intel_ringbuffer.h
> @@ -214,12 +214,6 @@ struct intel_engine_cs {
> * monotonic, even if not coherent.
> */
> void (*irq_seqno_barrier)(struct intel_engine_cs *ring);
> - int (*dispatch_execbuffer)(struct drm_i915_gem_request *req,
> - u64 offset, u32 length,
> - unsigned dispatch_flags);
> -#define I915_DISPATCH_SECURE 0x1
> -#define I915_DISPATCH_PINNED 0x2
> -#define I915_DISPATCH_RS 0x4
> void (*cleanup)(struct intel_engine_cs *ring);
>
> /* GEN8 signal/wait table - never trust comments!
> @@ -295,7 +289,11 @@ struct intel_engine_cs {
> u32 invalidate_domains,
> u32 flush_domains);
> int (*emit_bb_start)(struct drm_i915_gem_request *req,
> - u64 offset, unsigned dispatch_flags);
> + u64 offset, u32 length,
> + unsigned int dispatch_flags);
> +#define I915_DISPATCH_SECURE 0x1
> +#define I915_DISPATCH_PINNED 0x2
> +#define I915_DISPATCH_RS 0x4
BIT(0) BIT(1) etc. while touching it?
Regards, Joonas
>
> /**
> * List of objects currently involved in rendering from the
--
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-21 13:40 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 [this message]
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
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=1469108398.4821.27.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.