drm/i915: Disable semaphore inter-engine sync without timeslicing
authorChris Wilson <chris@chris-wilson.co.uk>
Thu, 21 May 2020 14:06:16 +0000 (15:06 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Thu, 21 May 2020 16:18:25 +0000 (17:18 +0100)
Since the removal of the no-semaphore boosting, we rely on timeslicing to
reorder passed inter-dependency hogs across the engines. However, we
require preemption to support timeslicing into user payloads, and not all
machine support preemption so we do not universally enable timeslicing,
even when it would correctly preempt our own inter-engine semaphores.
Since timeslicing and semaphore priority deboosting is now disabled on
Broadwell/Braswell, we have to follow suite and not use semaphores.

Testcase: igt/gem_exec_schedule/semaphore-codependency # bdw/bsw
Fixes: 18e4af04d218 ("drm/i915: Drop no-semaphore boosting")
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200521140617.30015-1-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/gem/i915_gem_context.c

index 900ea8b7fc8fb5b0cc22cc4f26c2885719ca71e9..f5d59d18cd5ba377b4b1961c712fcdd4f10751ea 100644 (file)
@@ -230,7 +230,7 @@ static void intel_context_set_gem(struct intel_context *ce,
                ce->timeline = intel_timeline_get(ctx->timeline);
 
        if (ctx->sched.priority >= I915_PRIORITY_NORMAL &&
-           intel_engine_has_semaphores(ce->engine))
+           intel_engine_has_timeslices(ce->engine))
                __set_bit(CONTEXT_USE_SEMAPHORES, &ce->flags);
 }
 
@@ -1969,7 +1969,7 @@ static int __apply_priority(struct intel_context *ce, void *arg)
 {
        struct i915_gem_context *ctx = arg;
 
-       if (!intel_engine_has_semaphores(ce->engine))
+       if (!intel_engine_has_timeslices(ce->engine))
                return 0;
 
        if (ctx->sched.priority >= I915_PRIORITY_NORMAL)