[Intel-gfx] [RFC PATCH 00/97] Basic GuC submission support in the i915
Matthew Brost
matthew.brost at intel.com
Thu Jun 3 16:34:02 UTC 2021
On Thu, Jun 03, 2021 at 09:51:19AM +0100, Tvrtko Ursulin wrote:
>
> On 03/06/2021 05:10, Matthew Brost wrote:
> > On Wed, Jun 02, 2021 at 04:27:18PM +0100, Tvrtko Ursulin wrote:
> > >
> > > On 25/05/2021 17:45, Matthew Brost wrote:
>
> [snip]
>
> > > > > * Kludgy way of interfacing with rest of the driver instead of refactoring
> > > > > to fit (idling, breadcrumbs, scheduler, tasklets, ...).
> > > > >
> > > >
> > > > Idling and breadcrumbs seem clean to me. Scheduler + tasklet are going
> > > > away once the DRM scheduler lands. No need rework those as we are just
> > > > going to rework this again.
> > >
> > > Well today I read the breadcrumbs patch and there is no way that's clean. It
> > > goes and creates one object per engine, then deletes them, replacing with
> > > GuC special one. All in the same engine setup. The same pattern of bolting
> > > on the GuC repeats too much for my taste.
> > >
> >
> > I don't think creating a default object /w a ref count then decrementing
> > the ref count + replacing it with a new object is that hard to
> > understand. IMO that is way better than how things worked previously
>
> It's not about it being hard to understand, although it certainly is far
> from the usual patterns, but about it being lazy design which in normal
> times would never be allowed. Because reduced and flattened to highlight the
> principal complaint it looks like this:
>
> engine_setup_for_each_engine:
> engine->breadcrumbs = create_breadcrumbs();
> if (guc) {
> if (!first_class_engine) {
> kfree(engine->breadcrumbs);
> engine->breadcrumbs = first_class_engine->breadcrumbs;
> } else {
> first_class_engine->breadcrumbs->vfuncs = guc_vfuncs;
> }
> }
>
I think are diving way to deep into individual patches on the cover
letter.
Agree this could be refactored bit more. Let me try a rework on this
patch in particular before this patch gets posted again.
Matt
> What I suggested is that patch should not break and hack the object oriented
> design and instead could do along the lines:
>
> gt_guc_setup:
> for_each_class:
> gt->uc.breadcrumbs[class] = create_guc_breadcrumbs();
>
> engine_setup_for_each_engine:
> if (guc)
> engine->breadcrumbs = get(gt->uc.breadcrumbs[class]);
> else
> engine->breadcrumbs = create_breadcrumbs();
>
> > where we just made implicit assumptions all over the driver of the
> > execlists backend behavior. If this was done properly in the current
> > i915 code base this really wouldn't be an issue.
>
> Don't really follow you here but it probably goes back to how upstream code
> was there available to be refactored all this time.
>
> Regards,
>
> Tvrtko
More information about the Intel-gfx
mailing list