[PATCH 12/12] ce-sentinel

Chris Wilson chris at chris-wilson.co.uk
Thu May 28 20:50:17 UTC 2020


From: Chris Wilson <ickle at kabylake.alporthouse.com>

---
 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 |  1 +
 drivers/gpu/drm/i915/i915_request.c           |  5 +++++
 4 files changed, 19 insertions(+)

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_context.c b/drivers/gpu/drm/i915/gem/i915_gem_context.c
index f5d59d18cd5b..583f312eb819 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_context.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_context.c
@@ -229,6 +229,9 @@ static void intel_context_set_gem(struct intel_context *ce,
 	if (ctx->timeline)
 		ce->timeline = intel_timeline_get(ctx->timeline);
 
+	if (ce->engine->class == VIDEO_DECODE_CLASS)
+		intel_context_set_sentinel(ce);
+
 	if (ctx->sched.priority >= I915_PRIORITY_NORMAL &&
 	    intel_engine_has_timeslices(ce->engine))
 		__set_bit(CONTEXT_USE_SEMAPHORES, &ce->flags);
diff --git a/drivers/gpu/drm/i915/gt/intel_context.h b/drivers/gpu/drm/i915/gt/intel_context.h
index 07be021882cc..6ad41bfa1ede 100644
--- a/drivers/gpu/drm/i915/gt/intel_context.h
+++ b/drivers/gpu/drm/i915/gt/intel_context.h
@@ -203,6 +203,16 @@ static inline bool intel_context_set_banned(struct intel_context *ce)
 	return test_and_set_bit(CONTEXT_BANNED, &ce->flags);
 }
 
+static inline bool intel_context_set_sentinel(const struct intel_context *ce)
+{
+	return test_bit(CONTEXT_SENTINEL, &ce->flags);
+}
+
+static inline bool intel_context_is_sentinel(const struct intel_context *ce)
+{
+	return test_bit(CONTEXT_SENTINEL, &ce->flags);
+}
+
 static inline bool
 intel_context_force_single_submission(const struct intel_context *ce)
 {
diff --git a/drivers/gpu/drm/i915/gt/intel_context_types.h b/drivers/gpu/drm/i915/gt/intel_context_types.h
index 4954b0df4864..76e5a0838b08 100644
--- a/drivers/gpu/drm/i915/gt/intel_context_types.h
+++ b/drivers/gpu/drm/i915/gt/intel_context_types.h
@@ -67,6 +67,7 @@ struct intel_context {
 #define CONTEXT_BANNED			5
 #define CONTEXT_FORCE_SINGLE_SUBMISSION	6
 #define CONTEXT_NOPREEMPT		7
+#define CONTEXT_SENTINEL		8
 
 	u32 *lrc_reg_state;
 	union {
diff --git a/drivers/gpu/drm/i915/i915_request.c b/drivers/gpu/drm/i915/i915_request.c
index 91a210234904..117f45123ebb 100644
--- a/drivers/gpu/drm/i915/i915_request.c
+++ b/drivers/gpu/drm/i915/i915_request.c
@@ -777,6 +777,11 @@ __i915_request_create(struct intel_context *ce, gfp_t gfp)
 	rq->fence.error = 0;
 	INIT_LIST_HEAD(&rq->fence.cb_list);
 
+	if (intel_context_is_sentinel(ce)) {
+		__set_bit(I915_FENCE_FLAG_SENTINEL, &rq->fence.flags);
+		__set_bit(I915_FENCE_FLAG_NOPREEMPT, &rq->fence.flags);
+	}
+
 	ret = intel_timeline_get_seqno(tl, rq, &seqno);
 	if (ret)
 		goto err_free;
-- 
2.20.1



More information about the Intel-gfx-trybot mailing list