If supported by the backend, we can quickly look at the context's
inflight engine rather than search along the active list to confirm.

Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk>
---
 drivers/gpu/drm/i915/gem/i915_gem_context.c          |  3 +++
 drivers/gpu/drm/i915/gt/intel_context.h              | 10 ++++++++++
 drivers/gpu/drm/i915/gt/intel_context_types.h        |  9 +++++----
 drivers/gpu/drm/i915/gt/intel_execlists_submission.c |  1 +
 4 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_context.c 
b/drivers/gpu/drm/i915/gem/i915_gem_context.c
index c7363036765a..68f58762d5e3 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_context.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_context.c
@@ -423,6 +423,9 @@ static struct intel_engine_cs *active_engine(struct 
intel_context *ce)
        struct intel_engine_cs *engine = NULL;
        struct i915_request *rq;
 
+       if (intel_context_has_inflight(ce))
+               return intel_context_inflight(ce);
+
        if (!ce->timeline)
                return NULL;
 
diff --git a/drivers/gpu/drm/i915/gt/intel_context.h 
b/drivers/gpu/drm/i915/gt/intel_context.h
index 2ce2ec639ba2..ecab3a7e4d1d 100644
--- a/drivers/gpu/drm/i915/gt/intel_context.h
+++ b/drivers/gpu/drm/i915/gt/intel_context.h
@@ -191,6 +191,16 @@ static inline bool intel_context_is_closed(const struct 
intel_context *ce)
        return test_bit(CONTEXT_CLOSED_BIT, &ce->flags);
 }
 
+static inline void intel_context_set_inflight(struct intel_context *ce)
+{
+       return __set_bit(CONTEXT_HAS_INFLIGHT, &ce->flags);
+}
+
+static inline bool intel_context_has_inflight(const struct intel_context *ce)
+{
+       return test_bit(CONTEXT_HAS_INFLIGHT, &ce->flags);
+}
+
 static inline bool intel_context_use_semaphores(const struct intel_context *ce)
 {
        return test_bit(CONTEXT_USE_SEMAPHORES, &ce->flags);
diff --git a/drivers/gpu/drm/i915/gt/intel_context_types.h 
b/drivers/gpu/drm/i915/gt/intel_context_types.h
index f7a0fb6f3a2e..679b268f0911 100644
--- a/drivers/gpu/drm/i915/gt/intel_context_types.h
+++ b/drivers/gpu/drm/i915/gt/intel_context_types.h
@@ -87,10 +87,11 @@ struct intel_context {
 #define CONTEXT_ALLOC_BIT              1
 #define CONTEXT_VALID_BIT              2
 #define CONTEXT_CLOSED_BIT             3
-#define CONTEXT_USE_SEMAPHORES         4
-#define CONTEXT_BANNED                 5
-#define CONTEXT_FORCE_SINGLE_SUBMISSION        6
-#define CONTEXT_NOPREEMPT              7
+#define CONTEXT_HAS_INFLIGHT           4
+#define CONTEXT_USE_SEMAPHORES         5
+#define CONTEXT_BANNED                 6
+#define CONTEXT_FORCE_SINGLE_SUBMISSION        7
+#define CONTEXT_NOPREEMPT              8
 
        u32 *lrc_reg_state;
        union {
diff --git a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c 
b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
index 537d182f4a6f..149c0493d993 100644
--- a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
+++ b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
@@ -2535,6 +2535,7 @@ static int __execlists_context_alloc(struct intel_context 
*ce,
        if (err)
                goto err_lrc;
 
+       intel_context_set_inflight(ce);
        return 0;
 
 err_lrc:
-- 
2.20.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to