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 <chris@xxxxxxxxxxxxxxxxxx> > Cc: Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx> > Signed-off-by: Oscar Mateo <oscar.mateo@xxxxxxxxx> > --- > 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@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx