On Thu, Jul 22, 2021 at 02:50:24PM -0700, Daniele Ceraolo Spurio wrote: > > <snip> > > > > > @@ -1756,15 +1796,119 @@ static int guc_context_alloc(struct intel_context *ce) > > > > return lrc_alloc(ce, ce->engine); > > > > } > > > > +static void guc_context_set_prio(struct intel_guc *guc, > > > > + struct intel_context *ce, > > > > + u8 prio) > > > > +{ > > > > + u32 action[] = { > > > > + INTEL_GUC_ACTION_SET_CONTEXT_PRIORITY, > > > > + ce->guc_id, > > > > + prio, > > > > + }; > > > > + > > > > + GEM_BUG_ON(prio < GUC_CLIENT_PRIORITY_KMD_HIGH || > > > > + prio > GUC_CLIENT_PRIORITY_NORMAL); > > > > + > > > > + if (ce->guc_prio == prio || submission_disabled(guc) || > > > > + !context_registered(ce)) > > > > + return; > > > > + > > > > + guc_submission_send_busy_loop(guc, action, ARRAY_SIZE(action), 0, true); > > > > + > > > > + ce->guc_prio = prio; > > > > + trace_intel_context_set_prio(ce); > > > > +} > > > > + > > > > +static inline u8 map_i915_prio_to_guc_prio(int prio) > > > > +{ > > > > + if (prio == I915_PRIORITY_NORMAL) > > > > + return GUC_CLIENT_PRIORITY_KMD_NORMAL; > > > > + else if (prio < I915_PRIORITY_NORMAL) > > > > + return GUC_CLIENT_PRIORITY_NORMAL; > > > > + else if (prio != I915_PRIORITY_BARRIER) > > > Shouldn't this be I915_PRIORITY_UNPREEMPTABLE? > > > > > No, I915_PRIORITY_UNPREEMPTABLE is an execlists only concept. > > then we need a > > /* we don't expect umpreemptable submissions with the GuC */ > GEM_BUG_ON(prio == I915_PRIORITY_UNPREEMPTABLE) > Actually this probably should < I915_PRIORITY_DISPLAY as we really want pageflips to be high than any user context. Matt > or something, because that prio level would be assigned incorrectly > otherwise. > > Daniele >