drm/i915: Reset sched_engine.no_priolist immediately after dequeue
Rather than touching schedule state in the generic PM code, reset the priolist allocation when empty in the submission code. Add a wrapper function to do this and update the backends to call it in the correct place. v3: (Jason Ekstrand) Update patch commit message with a better description Signed-off-by: Matthew Brost <matthew.brost@intel.com> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net> Signed-off-by: Matt Roper <matthew.d.roper@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20210618010638.98941-4-matthew.brost@intel.com
This commit is contained in:
committed by
Matt Roper
parent
074bb195bc
commit
c4fd7d8cc3
@@ -280,8 +280,6 @@ static int __engine_park(struct intel_wakeref *wf)
|
||||
if (engine->park)
|
||||
engine->park(engine);
|
||||
|
||||
engine->sched_engine->no_priolist = false;
|
||||
|
||||
/* While gt calls i915_vma_parked(), we have to break the lock cycle */
|
||||
intel_gt_pm_put_async(engine->gt);
|
||||
return 0;
|
||||
|
||||
@@ -1553,6 +1553,7 @@ done:
|
||||
* interrupt for secondary ports).
|
||||
*/
|
||||
sched_engine->queue_priority_hint = queue_prio(sched_engine);
|
||||
i915_sched_engine_reset_on_empty(sched_engine);
|
||||
spin_unlock(&engine->active.lock);
|
||||
|
||||
/*
|
||||
|
||||
@@ -263,6 +263,8 @@ static void guc_submission_tasklet(struct tasklet_struct *t)
|
||||
|
||||
__guc_dequeue(engine);
|
||||
|
||||
i915_sched_engine_reset_on_empty(engine->sched_engine);
|
||||
|
||||
spin_unlock_irqrestore(&engine->active.lock, flags);
|
||||
}
|
||||
|
||||
|
||||
@@ -72,6 +72,13 @@ i915_sched_engine_is_empty(struct i915_sched_engine *sched_engine)
|
||||
return RB_EMPTY_ROOT(&sched_engine->queue.rb_root);
|
||||
}
|
||||
|
||||
static inline void
|
||||
i915_sched_engine_reset_on_empty(struct i915_sched_engine *sched_engine)
|
||||
{
|
||||
if (i915_sched_engine_is_empty(sched_engine))
|
||||
sched_engine->no_priolist = false;
|
||||
}
|
||||
|
||||
void i915_request_show_with_schedule(struct drm_printer *m,
|
||||
const struct i915_request *rq,
|
||||
const char *prefix,
|
||||
|
||||
Reference in New Issue
Block a user