Commit b8b183ab authored by Matthew Brost's avatar Matthew Brost Committed by John Harrison

drm/i915/guc: Disable engine barriers with GuC during unpin

Disable engine barriers for unpinning with GuC. This feature isn't
needed with the GuC as it disables context scheduling before unpinning
which guarantees the HW will not reference the context. Hence it is
not necessary to defer unpinning until a kernel context request
completes on each engine in the context engine mask.

Cc: John Harrison <john.c.harrison@intel.com>
Signed-off-by: default avatarMatthew Brost <matthew.brost@intel.com>
Signed-off-by: default avatarDaniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Reviewed-by: default avatarJohn Harrison <John.C.Harrison@Intel.com>
Signed-off-by: default avatarJohn Harrison <John.C.Harrison@Intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20210721215101.139794-10-matthew.brost@intel.com
parent e0717063
...@@ -80,7 +80,7 @@ static int intel_context_active_acquire(struct intel_context *ce) ...@@ -80,7 +80,7 @@ static int intel_context_active_acquire(struct intel_context *ce)
__i915_active_acquire(&ce->active); __i915_active_acquire(&ce->active);
if (intel_context_is_barrier(ce)) if (intel_context_is_barrier(ce) || intel_engine_uses_guc(ce->engine))
return 0; return 0;
/* Preallocate tracking nodes */ /* Preallocate tracking nodes */
......
...@@ -209,7 +209,13 @@ static int __live_active_context(struct intel_engine_cs *engine) ...@@ -209,7 +209,13 @@ static int __live_active_context(struct intel_engine_cs *engine)
* This test makes sure that the context is kept alive until a * This test makes sure that the context is kept alive until a
* subsequent idle-barrier (emitted when the engine wakeref hits 0 * subsequent idle-barrier (emitted when the engine wakeref hits 0
* with no more outstanding requests). * with no more outstanding requests).
*
* In GuC submission mode we don't use idle barriers and we instead
* get a message from the GuC to signal that it is safe to unpin the
* context from memory.
*/ */
if (intel_engine_uses_guc(engine))
return 0;
if (intel_engine_pm_is_awake(engine)) { if (intel_engine_pm_is_awake(engine)) {
pr_err("%s is awake before starting %s!\n", pr_err("%s is awake before starting %s!\n",
...@@ -357,7 +363,11 @@ static int __live_remote_context(struct intel_engine_cs *engine) ...@@ -357,7 +363,11 @@ static int __live_remote_context(struct intel_engine_cs *engine)
* on the context image remotely (intel_context_prepare_remote_request), * on the context image remotely (intel_context_prepare_remote_request),
* which inserts foreign fences into intel_context.active, does not * which inserts foreign fences into intel_context.active, does not
* clobber the idle-barrier. * clobber the idle-barrier.
*
* In GuC submission mode we don't use idle barriers.
*/ */
if (intel_engine_uses_guc(engine))
return 0;
if (intel_engine_pm_is_awake(engine)) { if (intel_engine_pm_is_awake(engine)) {
pr_err("%s is awake before starting %s!\n", pr_err("%s is awake before starting %s!\n",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment