On Fri, Apr 28, 2017 at 05:26:09PM +0000, Oscar Mateo wrote:
> This will be more useful later to support platforms that need to emit
> HW commands at the beginning of every request (more general than emitting
> things at the beginning of every batchbuffer, which is already covered by
> emit_bb_start).

We already have one... You are presenting this without a good reason and
failing to transform similar code, which indicates to me that this vfunc
isn't that general.

> Cc: Chris Wilson <ch...@chris-wilson.co.uk>
> Cc: Joonas Lahtinen <joonas.lahti...@linux.intel.com>
> Signed-off-by: Oscar Mateo <oscar.ma...@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_lrc.c        | 17 ++++++++++++-----
>  drivers/gpu/drm/i915/intel_ringbuffer.h |  1 +
>  2 files changed, 13 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_lrc.c 
> b/drivers/gpu/drm/i915/intel_lrc.c
> index 9488578..a5c055a 100644
> --- a/drivers/gpu/drm/i915/intel_lrc.c
> +++ b/drivers/gpu/drm/i915/intel_lrc.c
> @@ -687,6 +687,15 @@ static bool insert_request(struct i915_priotree *pt, 
> struct rb_root *root)
>       return first;
>  }
>  
> +static int execlists_prepare_request(struct drm_i915_gem_request *request)
> +{
> +     u32 *cs = intel_ring_begin(request, 0);
> +     if (IS_ERR(cs))
> +             return PTR_ERR(cs);
> +
> +     return 0;
> +}
> +
>  static void execlists_submit_request(struct drm_i915_gem_request *request)
>  {
>       struct intel_engine_cs *engine = request->engine;
> @@ -879,7 +888,6 @@ static int execlists_request_alloc(struct 
> drm_i915_gem_request *request)
>  {
>       struct intel_engine_cs *engine = request->engine;
>       struct intel_context *ce = &request->ctx->engine[engine->id];
> -     u32 *cs;
>       int ret;
>  
>       GEM_BUG_ON(!ce->pin_count);
> @@ -904,11 +912,9 @@ static int execlists_request_alloc(struct 
> drm_i915_gem_request *request)
>                       goto err;
>       }
>  
> -     cs = intel_ring_begin(request, 0);
> -     if (IS_ERR(cs)) {
> -             ret = PTR_ERR(cs);
> +     ret = engine->prepare_request(request);
> +     if (ret)
>               goto err_unreserve;
> -     }
>  
>       if (!ce->initialised) {
>               ret = engine->init_context(request);
> @@ -1650,6 +1656,7 @@ void intel_logical_ring_cleanup(struct intel_engine_cs 
> *engine)
>  
>  static void execlists_set_default_submission(struct intel_engine_cs *engine)
>  {
> +     engine->prepare_request = execlists_prepare_request;
>       engine->submit_request = execlists_submit_request;
>       engine->schedule = execlists_schedule;
>       engine->irq_tasklet.func = intel_lrc_irq_handler;
> diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.h 
> b/drivers/gpu/drm/i915/intel_ringbuffer.h
> index d901831..67de978 100644
> --- a/drivers/gpu/drm/i915/intel_ringbuffer.h
> +++ b/drivers/gpu/drm/i915/intel_ringbuffer.h
> @@ -303,6 +303,7 @@ struct intel_engine_cs {
>       void            (*emit_breadcrumb)(struct drm_i915_gem_request *req,
>                                          u32 *cs);
>       int             emit_breadcrumb_sz;
> +     int             (*prepare_request)(struct drm_i915_gem_request *req);

Why in the emit group?
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to