All of lore.kernel.org
 help / color / mirror / Atom feed
From: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
To: Chris Wilson <chris@chris-wilson.co.uk>, intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 17/18] drm/i915: Unify legacy/execlists submit_execbuf callbacks
Date: Fri, 22 Jul 2016 11:45:07 +0300	[thread overview]
Message-ID: <1469177107.5916.18.camel@linux.intel.com> (raw)
In-Reply-To: <1469020330-1071-18-git-send-email-chris@chris-wilson.co.uk>

On ke, 2016-07-20 at 14:12 +0100, Chris Wilson wrote:
> Now that emitting requests is identical between legacy and execlists, we
> can use the same function to build up the ring for submitting to either
> engine. (With the exception of i915_switch_contexts(), but in time that
> will also be handled gracefully.)
> 
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>

This series craves for some T-b's.

Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>

> ---
>  drivers/gpu/drm/i915/i915_drv.h            |  20 -----
>  drivers/gpu/drm/i915/i915_gem.c            |   2 -
>  drivers/gpu/drm/i915/i915_gem_context.c    |   7 +-
>  drivers/gpu/drm/i915/i915_gem_execbuffer.c |  24 ++++--
>  drivers/gpu/drm/i915/intel_lrc.c           | 123 -----------------------------
>  drivers/gpu/drm/i915/intel_lrc.h           |   4 -
>  6 files changed, 21 insertions(+), 159 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index 3f67431577e3..f188c9a9b746 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -1705,18 +1705,6 @@ struct i915_virtual_gpu {
>  	bool active;
>  };
>  
> -struct i915_execbuffer_params {
> -	struct drm_device               *dev;
> -	struct drm_file                 *file;
> -	uint32_t                        dispatch_flags;
> -	uint32_t                        args_batch_start_offset;
> -	uint64_t                        batch_obj_vm_offset;
> -	struct intel_engine_cs *engine;
> -	struct drm_i915_gem_object      *batch_obj;
> -	struct i915_gem_context            *ctx;
> -	struct drm_i915_gem_request     *request;
> -};
> -
>  /* used in computing the new watermarks state */
>  struct intel_wm_config {
>  	unsigned int num_pipes_active;
> @@ -2016,9 +2004,6 @@ struct drm_i915_private {
>  
>  	/* Abstract the submission mechanism (legacy ringbuffer or execlists) away */
>  	struct {
> -		int (*execbuf_submit)(struct i915_execbuffer_params *params,
> -				      struct drm_i915_gem_execbuffer2 *args,
> -				      struct list_head *vmas);
>  		void (*cleanup_engine)(struct intel_engine_cs *engine);
>  		void (*stop_engine)(struct intel_engine_cs *engine);
>  
> @@ -2990,11 +2975,6 @@ int i915_gem_set_domain_ioctl(struct drm_device *dev, void *data,
>  			      struct drm_file *file_priv);
>  int i915_gem_sw_finish_ioctl(struct drm_device *dev, void *data,
>  			     struct drm_file *file_priv);
> -void i915_gem_execbuffer_move_to_active(struct list_head *vmas,
> -					struct drm_i915_gem_request *req);
> -int i915_gem_ringbuffer_submission(struct i915_execbuffer_params *params,
> -				   struct drm_i915_gem_execbuffer2 *args,
> -				   struct list_head *vmas);
>  int i915_gem_execbuffer(struct drm_device *dev, void *data,
>  			struct drm_file *file_priv);
>  int i915_gem_execbuffer2(struct drm_device *dev, void *data,
> diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
> index 77d7c0b012f4..9fdecef34fa8 100644
> --- a/drivers/gpu/drm/i915/i915_gem.c
> +++ b/drivers/gpu/drm/i915/i915_gem.c
> @@ -4531,11 +4531,9 @@ int i915_gem_init(struct drm_device *dev)
>  	mutex_lock(&dev->struct_mutex);
>  
>  	if (!i915.enable_execlists) {
> -		dev_priv->gt.execbuf_submit = i915_gem_ringbuffer_submission;
>  		dev_priv->gt.cleanup_engine = intel_engine_cleanup;
>  		dev_priv->gt.stop_engine = intel_engine_stop;
>  	} else {
> -		dev_priv->gt.execbuf_submit = intel_execlists_submission;
>  		dev_priv->gt.cleanup_engine = intel_logical_ring_cleanup;
>  		dev_priv->gt.stop_engine = intel_logical_ring_stop;
>  	}
> diff --git a/drivers/gpu/drm/i915/i915_gem_context.c b/drivers/gpu/drm/i915/i915_gem_context.c
> index e1eed0f449c6..72b21c7b7547 100644
> --- a/drivers/gpu/drm/i915/i915_gem_context.c
> +++ b/drivers/gpu/drm/i915/i915_gem_context.c
> @@ -893,8 +893,9 @@ int i915_switch_context(struct drm_i915_gem_request *req)
>  {
>  	struct intel_engine_cs *engine = req->engine;
>  
> -	WARN_ON(i915.enable_execlists);
>  	lockdep_assert_held(&req->i915->drm.struct_mutex);
> +	if (i915.enable_execlists)
> +		return 0;
>  
>  	if (!req->ctx->engine[engine->id].state) {
>  		struct i915_gem_context *to = req->ctx;
> @@ -942,9 +943,7 @@ int i915_gem_switch_to_kernel_context(struct drm_i915_private *dev_priv)
>  		if (IS_ERR(req))
>  			return PTR_ERR(req);
>  
> -		ret = 0;
> -		if (!i915.enable_execlists)
> -			ret = i915_switch_context(req);
> +		ret = i915_switch_context(req);
>  		i915_add_request_no_flush(req);
>  		if (ret)
>  			return ret;
> diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
> index 2d9f1f4bc058..e302477418d8 100644
> --- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
> +++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
> @@ -42,6 +42,18 @@
>  
>  #define BATCH_OFFSET_BIAS (256*1024)
>  
> +struct i915_execbuffer_params {
> +	struct drm_device               *dev;
> +	struct drm_file                 *file;
> +	u32				 dispatch_flags;
> +	u32				 args_batch_start_offset;
> +	u32				 batch_obj_vm_offset;
> +	struct intel_engine_cs          *engine;
> +	struct drm_i915_gem_object      *batch_obj;
> +	struct i915_gem_context         *ctx;
> +	struct drm_i915_gem_request     *request;
> +};
> +
>  struct eb_vmas {
>  	struct list_head vmas;
>  	int and;
> @@ -1117,7 +1129,7 @@ i915_gem_validate_context(struct drm_device *dev, struct drm_file *file,
>  	return ctx;
>  }
>  
> -void
> +static void
>  i915_gem_execbuffer_move_to_active(struct list_head *vmas,
>  				   struct drm_i915_gem_request *req)
>  {
> @@ -1244,10 +1256,10 @@ err:
>  		return ERR_PTR(ret);
>  }
>  
> -int
> -i915_gem_ringbuffer_submission(struct i915_execbuffer_params *params,
> -			       struct drm_i915_gem_execbuffer2 *args,
> -			       struct list_head *vmas)
> +static int
> +execbuf_submit(struct i915_execbuffer_params *params,
> +	       struct drm_i915_gem_execbuffer2 *args,
> +	       struct list_head *vmas)
>  {
>  	struct drm_i915_private *dev_priv = params->request->i915;
>  	u64 exec_start, exec_len;
> @@ -1636,7 +1648,7 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
>  	params->batch_obj               = batch_obj;
>  	params->ctx                     = ctx;
>  
> -	ret = dev_priv->gt.execbuf_submit(params, args, &eb->vmas);
> +	ret = execbuf_submit(params, args, &eb->vmas);
>  err_request:
>  	i915_gem_execbuffer_retire_commands(params);
>  
> diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
> index bce37d0d431f..8d1589f0ea7e 100644
> --- a/drivers/gpu/drm/i915/intel_lrc.c
> +++ b/drivers/gpu/drm/i915/intel_lrc.c
> @@ -642,39 +642,6 @@ static void execlists_context_queue(struct drm_i915_gem_request *request)
>  	spin_unlock_bh(&engine->execlist_lock);
>  }
>  
> -static int execlists_move_to_gpu(struct drm_i915_gem_request *req,
> -				 struct list_head *vmas)
> -{
> -	const unsigned other_rings = ~intel_engine_flag(req->engine);
> -	struct i915_vma *vma;
> -	uint32_t flush_domains = 0;
> -	bool flush_chipset = false;
> -	int ret;
> -
> -	list_for_each_entry(vma, vmas, exec_list) {
> -		struct drm_i915_gem_object *obj = vma->obj;
> -
> -		if (obj->active & other_rings) {
> -			ret = i915_gem_object_sync(obj, req);
> -			if (ret)
> -				return ret;
> -		}
> -
> -		if (obj->base.write_domain & I915_GEM_DOMAIN_CPU)
> -			flush_chipset |= i915_gem_clflush_object(obj, false);
> -
> -		flush_domains |= obj->base.write_domain;
> -	}
> -
> -	if (flush_domains & I915_GEM_DOMAIN_GTT)
> -		wmb();
> -
> -	/* Unconditionally invalidate gpu caches and ensure that we do flush
> -	 * any residual writes from the previous batch.
> -	 */
> -	return req->engine->emit_flush(req, I915_GEM_GPU_DOMAINS, 0);
> -}
> -
>  int intel_logical_ring_alloc_request_extras(struct drm_i915_gem_request *request)
>  {
>  	struct intel_engine_cs *engine = request->engine;
> @@ -776,96 +743,6 @@ intel_logical_ring_advance_and_submit(struct drm_i915_gem_request *request)
>  	return 0;
>  }
>  
> -/**
> - * intel_execlists_submission() - submit a batchbuffer for execution, Execlists style
> - * @params: execbuffer call parameters.
> - * @args: execbuffer call arguments.
> - * @vmas: list of vmas.
> - *
> - * This is the evil twin version of i915_gem_ringbuffer_submission. It abstracts
> - * away the submission details of the execbuffer ioctl call.
> - *
> - * Return: non-zero if the submission fails.
> - */
> -int intel_execlists_submission(struct i915_execbuffer_params *params,
> -			       struct drm_i915_gem_execbuffer2 *args,
> -			       struct list_head *vmas)
> -{
> -	struct drm_device       *dev = params->dev;
> -	struct intel_engine_cs *engine = params->engine;
> -	struct drm_i915_private *dev_priv = to_i915(dev);
> -	struct intel_ring *ring = params->request->ring;
> -	u64 exec_start;
> -	int instp_mode;
> -	u32 instp_mask;
> -	int ret;
> -
> -	instp_mode = args->flags & I915_EXEC_CONSTANTS_MASK;
> -	instp_mask = I915_EXEC_CONSTANTS_MASK;
> -	switch (instp_mode) {
> -	case I915_EXEC_CONSTANTS_REL_GENERAL:
> -	case I915_EXEC_CONSTANTS_ABSOLUTE:
> -	case I915_EXEC_CONSTANTS_REL_SURFACE:
> -		if (instp_mode != 0 && engine->id != RCS) {
> -			DRM_DEBUG("non-0 rel constants mode on non-RCS\n");
> -			return -EINVAL;
> -		}
> -
> -		if (instp_mode != dev_priv->relative_constants_mode) {
> -			if (instp_mode == I915_EXEC_CONSTANTS_REL_SURFACE) {
> -				DRM_DEBUG("rel surface constants mode invalid on gen5+\n");
> -				return -EINVAL;
> -			}
> -
> -			/* The HW changed the meaning on this bit on gen6 */
> -			instp_mask &= ~I915_EXEC_CONSTANTS_REL_SURFACE;
> -		}
> -		break;
> -	default:
> -		DRM_DEBUG("execbuf with unknown constants: %d\n", instp_mode);
> -		return -EINVAL;
> -	}
> -
> -	if (args->flags & I915_EXEC_GEN7_SOL_RESET) {
> -		DRM_DEBUG("sol reset is gen7 only\n");
> -		return -EINVAL;
> -	}
> -
> -	ret = execlists_move_to_gpu(params->request, vmas);
> -	if (ret)
> -		return ret;
> -
> -	if (engine->id == RCS &&
> -	    instp_mode != dev_priv->relative_constants_mode) {
> -		ret = intel_ring_begin(params->request, 4);
> -		if (ret)
> -			return ret;
> -
> -		intel_ring_emit(ring, MI_NOOP);
> -		intel_ring_emit(ring, MI_LOAD_REGISTER_IMM(1));
> -		intel_ring_emit_reg(ring, INSTPM);
> -		intel_ring_emit(ring, instp_mask << 16 | instp_mode);
> -		intel_ring_advance(ring);
> -
> -		dev_priv->relative_constants_mode = instp_mode;
> -	}
> -
> -	exec_start = params->batch_obj_vm_offset +
> -		     args->batch_start_offset;
> -
> -	ret = engine->emit_bb_start(params->request,
> -				    exec_start, args->batch_len,
> -				    params->dispatch_flags);
> -	if (ret)
> -		return ret;
> -
> -	trace_i915_gem_ring_dispatch(params->request, params->dispatch_flags);
> -
> -	i915_gem_execbuffer_move_to_active(vmas, params->request);
> -
> -	return 0;
> -}
> -
>  void intel_execlists_cancel_requests(struct intel_engine_cs *engine)
>  {
>  	struct drm_i915_gem_request *req, *tmp;
> diff --git a/drivers/gpu/drm/i915/intel_lrc.h b/drivers/gpu/drm/i915/intel_lrc.h
> index 212ee7c43438..0f9c9925985c 100644
> --- a/drivers/gpu/drm/i915/intel_lrc.h
> +++ b/drivers/gpu/drm/i915/intel_lrc.h
> @@ -95,10 +95,6 @@ uint64_t intel_lr_context_descriptor(struct i915_gem_context *ctx,
>  /* Execlists */
>  int intel_sanitize_enable_execlists(struct drm_i915_private *dev_priv,
>  				    int enable_execlists);
> -struct i915_execbuffer_params;
> -int intel_execlists_submission(struct i915_execbuffer_params *params,
> -			       struct drm_i915_gem_execbuffer2 *args,
> -			       struct list_head *vmas);
>  
>  void intel_execlists_cancel_requests(struct intel_engine_cs *engine);
>  
-- 
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

  reply	other threads:[~2016-07-22  8:45 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
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 [this message]
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=1469177107.5916.18.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.