[Intel-gfx] [PATCH 1/4] drm/i915: Move execlists setup out of common

Tvrtko Ursulin tvrtko.ursulin at linux.intel.com
Tue Nov 28 17:29:25 UTC 2017


On 28/11/2017 16:04, Chris Wilson wrote:
> Quoting Tvrtko Ursulin (2017-11-28 13:07:54)
>>
>> On 28/11/2017 12:48, Chris Wilson wrote:
>>> Quoting Tvrtko Ursulin (2017-11-28 12:41:27)
>>>> From: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
>>>>
>>>> Move the execlists specific setup out of intel_engine_setup_common. This
>>>> was supposed to be only for backend agnostic bits. At the same time rename
>>>> it to intel_engine_setup_execlist to follow the setup vs init naming
>>>> convetion we have.
>>>>
>>>> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
>>>> ---
>>>> +static void
>>>> +intel_engine_setup_execlist(struct intel_engine_cs *engine)
>>>> +{
>>>> +       struct intel_engine_execlists * const execlists = &engine->execlists;
>>>> +
>>>> +       execlists->csb_use_mmio = csb_force_mmio(engine->i915);
>>>> +
>>>> +       execlists->port_mask = 1;
>>>> +       BUILD_BUG_ON_NOT_POWER_OF_2(execlists_num_ports(execlists));
>>>> +       GEM_BUG_ON(execlists_num_ports(execlists) > EXECLIST_MAX_PORTS);
>>>> +
>>>> +       execlists->queue = RB_ROOT;
>>>> +       execlists->first = NULL;
>>>> +}
>>>
>>> The only problem here was that we wanted to be sure that some fields
>>> were initialised for the common paths, i.e. so we could iterate over the
>>> queue without worrying first if it was execlists (if it wasn't execlists
>>> the queue would be empty).
>>>
>>> Now, I think we could just rely on zero initialisation, but that was the
>>> rationale for it ending up early. Now we could split it between
>>> setup_execlists and init_execlists if we want the pedantry.
>>
>> Common paths as in ringbuffer submission? I grepped around and don't see
>> it used there.
> 
> See the reset code, the debug code, etc; in the common layer, above the
> backends, we want to be neutral.
> 
>> Then about setup vs init, we said init is for hw access so I don't
>> follow how you would split the above?
> 
> init_hw is for initialising hw. Better names for the phases is still
> open :)

Okay I found execlists->first usage in intel_engine_dump, so one so far. 
That could be made conditional, or if there are other places abstracted 
out to the backend implementation. It could be that I just did not find 
more due too much context switching?

This way or the other, I did not want to put a code like "if 
(HAS_EXECLISTS(i915)) ..."  in the function called 
intel_engine_init_execlists. That's just wrong.

And I'd say it's equally wrong to call intel_engine_init_execlists from 
_intel_engine_setup_common_, because the spiritual starting point for 
this common setup refactoring was to only put there bits _common_ to 
both backends.

If you want to keep this approach of letting the higher layers just 
assume they can access backend specific parts then simplest would be I 
just drop this patch and put that ugly "if HAS_EXECLISTS" where I don't 
want to put it. Can view it as interim and fixup later?

Regards,

Tvrtko


More information about the Intel-gfx mailing list