[Intel-gfx] [PATCH 1/2] drm/i915/guc: Support engine busy stats

Tvrtko Ursulin tvrtko.ursulin at linux.intel.com
Thu Feb 22 08:26:58 UTC 2018


On 22/02/2018 07:51, Chris Wilson wrote:
> Quoting Tvrtko Ursulin (2018-02-22 06:07:32)
>> From: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
>>
>> Place context in/out hooks into the GuC backend, when contexts are
>> assigned to ports, and removed from them, in order to be able to
>> provide engine busy stats in GuC mode.
>>
>> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
>> Testcase: igt/perf_pmu/busy-accuracy-*-*
>> ---
>>   drivers/gpu/drm/i915/intel_guc_submission.c | 13 ++++++++++---
>>   1 file changed, 10 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/intel_guc_submission.c b/drivers/gpu/drm/i915/intel_guc_submission.c
>> index 649113c7a3c2..8e99f8fd6da2 100644
>> --- a/drivers/gpu/drm/i915/intel_guc_submission.c
>> +++ b/drivers/gpu/drm/i915/intel_guc_submission.c
>> @@ -673,6 +673,7 @@ static void guc_dequeue(struct intel_engine_cs *engine)
>>          struct intel_engine_execlists * const execlists = &engine->execlists;
>>          struct execlist_port *port = execlists->port;
>>          struct i915_request *last = NULL;
>> +       struct i915_gem_context *last_ctx = NULL;
>>          const struct execlist_port * const last_port =
>>                  &execlists->port[execlists->port_mask];
>>          bool submit = false;
>> @@ -718,8 +719,13 @@ static void guc_dequeue(struct intel_engine_cs *engine)
>>                                          goto done;
>>                                  }
>>   
>> -                               if (submit)
>> +                               if (submit) {
>>                                          port_assign(port, last);
>> +                                       if (last->ctx != last_ctx) {
>> +                                               intel_engine_context_in(last->engine);
>> +                                               last_ctx = last->ctx;
>> +                                       }
>> +                               }
>>                                  port++;
>>                          }
>>   
>> @@ -741,6 +747,8 @@ static void guc_dequeue(struct intel_engine_cs *engine)
>>          execlists->first = rb;
>>          if (submit) {
>>                  port_assign(port, last);
>> +               if (last->ctx != last_ctx)
>> +                       intel_engine_context_in(last->engine);
>>                  execlists_set_active(execlists, EXECLISTS_ACTIVE_USER);
>>                  guc_submit(engine);
>>          }
>> @@ -763,6 +771,7 @@ static void guc_submission_tasklet(unsigned long data)
>>   
>>          rq = port_request(&port[0]);
>>          while (rq && i915_request_completed(rq)) {
>> +               intel_engine_context_out(rq->engine);
> 
> If we only emit context_in once for 2 consecutive rq with the same
> context, we would need to do the same for context_out.
> 
> Will be interesting to see if this explodes, or we may need yet another
> test :)


I thought two consecutive requests with the same context is one port, so 
one context_in and one context_out. But maybe I'm wrong. Lets wait and 
see as you say. :)

Regards,

Tvrtko



More information about the Intel-gfx mailing list