[Intel-gfx] [PATCH] drm/i915: New vfunc prepare_request
Oscar Mateo
oscar.mateo at intel.com
Mon May 1 07:28:12 UTC 2017
On 04/29/2017 08:31 AM, Chris Wilson wrote:
> 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.
It looks like I've missed that. What function are you talking about?
>> Cc: Chris Wilson <chris at chris-wilson.co.uk>
>> Cc: Joonas Lahtinen <joonas.lahtinen at linux.intel.com>
>> Signed-off-by: Oscar Mateo <oscar.mateo at 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
>
Missing newline.
-- Oscar
More information about the Intel-gfx
mailing list