[Intel-gfx] [PATCH 09/10] drm/i915/guc: Preemption! With GuC.
Michał Winiarski
michal.winiarski at intel.com
Thu Oct 5 18:38:53 UTC 2017
On Thu, Oct 05, 2017 at 10:31:34AM +0000, Chris Wilson wrote:
> Quoting Michał Winiarski (2017-10-05 10:20:04)
> > @@ -625,10 +723,23 @@ static void i915_guc_irq_handler(unsigned long data)
> > struct intel_engine_cs * const engine = (struct intel_engine_cs *)data;
> > struct intel_engine_execlists * const execlists = &engine->execlists;
> > struct execlist_port *port = execlists->port;
> > - const struct execlist_port * const last_port =
> > - &execlists->port[execlists->port_mask];
> > struct drm_i915_gem_request *rq;
> >
> > + if (READ_ONCE(execlists->preempt) &&
> > + intel_read_status_page(engine, I915_GEM_HWS_PREEMPT_INDEX) ==
> > + GUC_PREEMPT_FINISHED) {
> > + execlist_cancel_port_requests(&engine->execlists);
> > +
> > + spin_lock_irq(&engine->timeline->lock);
> > + unwind_incomplete_requests(engine);
> > + spin_unlock_irq(&engine->timeline->lock);
> > +
> > + wait_for_guc_preempt_report(engine);
> > +
> > + WRITE_ONCE(execlists->preempt, false);
> > + intel_write_status_page(engine, I915_GEM_HWS_PREEMPT_INDEX, 0);
>
> Ok. So we injected the preempt context, observed it complete. What stops
> the GuC from switching back to the normal context and draining its wq?
> (Those requests we've just put back to be re-executed later.)
> -Chris
We're sending GuC action with:
INTEL_GUC_PREEMPT_OPTION_DROP_WORK_Q | INTEL_GUC_PREEMPT_OPTION_DROP_SUBMIT_Q
Which prevents GuC from doing exactly that.
I'll add a comment in inject preempt ctx.
-Michał
More information about the Intel-gfx
mailing list