From: Tvrtko Ursulin <[email protected]>

Allow super long OpenCL workloads which cannot be preempted within
the default timeout to run out of the box.

v2:
 * Make it stick out more and apply only to RCS. (Chris)

Signed-off-by: Tvrtko Ursulin <[email protected]>
Cc: Chris Wilson <[email protected]>
Cc: Joonas Lahtinen <[email protected]>
Cc: Michal Mrozek <[email protected]>
---
 drivers/gpu/drm/i915/gt/intel_engine_cs.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/i915/gt/intel_engine_cs.c 
b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
index 53ac3f00909a..02b1f60c0925 100644
--- a/drivers/gpu/drm/i915/gt/intel_engine_cs.c
+++ b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
@@ -275,6 +275,7 @@ static void intel_engine_sanitize_mmio(struct 
intel_engine_cs *engine)
 static int intel_engine_setup(struct intel_gt *gt, enum intel_engine_id id)
 {
        const struct engine_info *info = &intel_engines[id];
+       struct drm_i915_private *i915 = gt->i915;
        struct intel_engine_cs *engine;
 
        BUILD_BUG_ON(MAX_ENGINE_CLASS >= BIT(GEN11_ENGINE_CLASS_WIDTH));
@@ -301,11 +302,11 @@ static int intel_engine_setup(struct intel_gt *gt, enum 
intel_engine_id id)
        engine->id = id;
        engine->legacy_idx = INVALID_ENGINE;
        engine->mask = BIT(id);
-       engine->i915 = gt->i915;
+       engine->i915 = i915;
        engine->gt = gt;
        engine->uncore = gt->uncore;
        engine->hw_id = engine->guc_id = info->hw_id;
-       engine->mmio_base = __engine_mmio_base(gt->i915, info->mmio_bases);
+       engine->mmio_base = __engine_mmio_base(i915, info->mmio_bases);
 
        engine->class = info->class;
        engine->instance = info->instance;
@@ -322,11 +323,15 @@ static int intel_engine_setup(struct intel_gt *gt, enum 
intel_engine_id id)
        engine->props.timeslice_duration_ms =
                CONFIG_DRM_I915_TIMESLICE_DURATION;
 
+       /* Override to uninterruptible for OpenCL workloads. */
+       if (INTEL_GEN(i915) == 12 && engine->class == RENDER_CLASS)
+               engine->props.preempt_timeout_ms = 0;
+
        engine->context_size = intel_engine_context_size(gt, engine->class);
        if (WARN_ON(engine->context_size > BIT(20)))
                engine->context_size = 0;
        if (engine->context_size)
-               DRIVER_CAPS(gt->i915)->has_logical_contexts = true;
+               DRIVER_CAPS(i915)->has_logical_contexts = true;
 
        /* Nothing to do here, execute in order of dependencies */
        engine->schedule = NULL;
@@ -342,7 +347,7 @@ static int intel_engine_setup(struct intel_gt *gt, enum 
intel_engine_id id)
        gt->engine_class[info->class][info->instance] = engine;
        gt->engine[id] = engine;
 
-       gt->i915->engine[id] = engine;
+       i915->engine[id] = engine;
 
        return 0;
 }
-- 
2.20.1

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to