drm/i915/execlists: Select arb on/off around batches based on preemption
authorChris Wilson <chris@chris-wilson.co.uk>
Fri, 13 Dec 2019 15:13:31 +0000 (15:13 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Fri, 20 Dec 2019 12:00:34 +0000 (12:00 +0000)
Decide whether or not we need to disable arbitration within user batches
based on our intel_engine_has_preemption() flag.

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/20191213151331.1788371-1-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/gt/intel_lrc.c

index ec93c47..f060baf 100644 (file)
@@ -3256,9 +3256,9 @@ static void execlists_reset_finish(struct intel_engine_cs *engine)
                     atomic_read(&execlists->tasklet.count));
 }
 
-static int gen8_emit_bb_start(struct i915_request *rq,
-                             u64 offset, u32 len,
-                             const unsigned int flags)
+static int gen8_emit_bb_start_noarb(struct i915_request *rq,
+                                   u64 offset, u32 len,
+                                   const unsigned int flags)
 {
        u32 *cs;
 
@@ -3292,7 +3292,7 @@ static int gen8_emit_bb_start(struct i915_request *rq,
        return 0;
 }
 
-static int gen9_emit_bb_start(struct i915_request *rq,
+static int gen8_emit_bb_start(struct i915_request *rq,
                              u64 offset, u32 len,
                              const unsigned int flags)
 {
@@ -3767,6 +3767,11 @@ void intel_execlists_set_default_submission(struct intel_engine_cs *engine)
 
        if (INTEL_GEN(engine->i915) >= 12)
                engine->flags |= I915_ENGINE_HAS_RELATIVE_MMIO;
+
+       if (intel_engine_has_preemption(engine))
+               engine->emit_bb_start = gen8_emit_bb_start;
+       else
+               engine->emit_bb_start = gen8_emit_bb_start_noarb;
 }
 
 static void execlists_shutdown(struct intel_engine_cs *engine)
@@ -3820,10 +3825,6 @@ logical_ring_default_vfuncs(struct intel_engine_cs *engine)
                 * until a more refined solution exists.
                 */
        }
-       if (IS_GEN(engine->i915, 8))
-               engine->emit_bb_start = gen8_emit_bb_start;
-       else
-               engine->emit_bb_start = gen9_emit_bb_start;
 }
 
 static inline void