[Intel-gfx] [PATCH] drm/i915/execlists: Enable timeslice on partial virtual engine dequeue
Chris Wilson
chris at chris-wilson.co.uk
Thu Mar 5 07:35:31 UTC 2020
If we stop filling the ELSP due to an incompatible virtual engine
request, check if we should enable the timeslice on behalf of the queue.
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
---
drivers/gpu/drm/i915/gt/intel_lrc.c | 21 ++++++++++++++++-----
1 file changed, 16 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/i915/gt/intel_lrc.c b/drivers/gpu/drm/i915/gt/intel_lrc.c
index 5da86a40434c..954bd4797482 100644
--- a/drivers/gpu/drm/i915/gt/intel_lrc.c
+++ b/drivers/gpu/drm/i915/gt/intel_lrc.c
@@ -1802,6 +1802,20 @@ static void set_timeslice(struct intel_engine_cs *engine)
set_timer_ms(&engine->execlists.timer, active_timeslice(engine));
}
+static void start_timeslice(struct intel_engine_cs *engine,
+ struct i915_request *last)
+{
+ struct intel_engine_execlists *execlists = &engine->execlists;
+
+ /* As we are returning early, update the hint from the queue */
+ execlists->switch_priority_hint =
+ max(execlists->queue_priority_hint,
+ execlists->switch_priority_hint);
+
+ if (!execlists->timer.expires && need_timeslice(engine, last))
+ set_timer_ms(&execlists->timer, timeslice(engine));
+}
+
static void record_preemption(struct intel_engine_execlists *execlists)
{
(void)I915_SELFTEST_ONLY(execlists->preempt_hang.count++);
@@ -1965,11 +1979,7 @@ static void execlists_dequeue(struct intel_engine_cs *engine)
* Even if ELSP[1] is occupied and not worthy
* of timeslices, our queue might be.
*/
- if (!execlists->timer.expires &&
- need_timeslice(engine, last))
- set_timer_ms(&execlists->timer,
- timeslice(engine));
-
+ start_timeslice(engine, last);
return;
}
}
@@ -2004,6 +2014,7 @@ static void execlists_dequeue(struct intel_engine_cs *engine)
if (last && !can_merge_rq(last, rq)) {
spin_unlock(&ve->base.active.lock);
+ start_timeslice(engine, last);
return; /* leave this for another */
}
--
2.25.1
More information about the Intel-gfx
mailing list