|
@@ -743,23 +743,26 @@ static void guc_dequeue(struct intel_engine_cs *engine)
|
|
if (!rb)
|
|
if (!rb)
|
|
goto unlock;
|
|
goto unlock;
|
|
|
|
|
|
- if (HAS_LOGICAL_RING_PREEMPTION(engine->i915) && port_isset(port)) {
|
|
|
|
- struct guc_preempt_work *preempt_work =
|
|
|
|
- &engine->i915->guc.preempt_work[engine->id];
|
|
|
|
-
|
|
|
|
- if (rb_entry(rb, struct i915_priolist, node)->priority >
|
|
|
|
- max(port_request(port)->priotree.priority, 0)) {
|
|
|
|
- execlists_set_active(execlists,
|
|
|
|
- EXECLISTS_ACTIVE_PREEMPT);
|
|
|
|
- queue_work(engine->i915->guc.preempt_wq,
|
|
|
|
- &preempt_work->work);
|
|
|
|
- goto unlock;
|
|
|
|
- } else if (port_isset(last_port)) {
|
|
|
|
- goto unlock;
|
|
|
|
|
|
+ if (port_isset(port)) {
|
|
|
|
+ if (HAS_LOGICAL_RING_PREEMPTION(engine->i915)) {
|
|
|
|
+ struct guc_preempt_work *preempt_work =
|
|
|
|
+ &engine->i915->guc.preempt_work[engine->id];
|
|
|
|
+
|
|
|
|
+ if (rb_entry(rb, struct i915_priolist, node)->priority >
|
|
|
|
+ max(port_request(port)->priotree.priority, 0)) {
|
|
|
|
+ execlists_set_active(execlists,
|
|
|
|
+ EXECLISTS_ACTIVE_PREEMPT);
|
|
|
|
+ queue_work(engine->i915->guc.preempt_wq,
|
|
|
|
+ &preempt_work->work);
|
|
|
|
+ goto unlock;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
port++;
|
|
port++;
|
|
|
|
+ if (port_isset(port))
|
|
|
|
+ goto unlock;
|
|
}
|
|
}
|
|
|
|
+ GEM_BUG_ON(port_isset(port));
|
|
|
|
|
|
do {
|
|
do {
|
|
struct i915_priolist *p = rb_entry(rb, typeof(*p), node);
|
|
struct i915_priolist *p = rb_entry(rb, typeof(*p), node);
|