All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chris Wilson <chris@chris-wilson.co.uk>
To: intel-gfx@lists.freedesktop.org
Subject: [PATCH 07/12] drm/i915: Mark up "sentinel" requests
Date: Sun,  6 Oct 2019 17:49:57 +0100	[thread overview]
Message-ID: <20191006165002.30312-7-chris@chris-wilson.co.uk> (raw)
In-Reply-To: <20191006165002.30312-1-chris@chris-wilson.co.uk>

Sometimes we want to emit a terminator request, a request that flushes
the pipeline and allows no request to come after it. This can be used
for a "preempt-to-idle" to ensure that upon processing the
context-switch to that request, all other active contexts have been
flushed.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
---
 drivers/gpu/drm/i915/gt/intel_lrc.c |  6 ++++++
 drivers/gpu/drm/i915/i915_request.h | 10 ++++++++--
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/gt/intel_lrc.c b/drivers/gpu/drm/i915/gt/intel_lrc.c
index 0d5b069c67a4..177b0f6874dd 100644
--- a/drivers/gpu/drm/i915/gt/intel_lrc.c
+++ b/drivers/gpu/drm/i915/gt/intel_lrc.c
@@ -1233,6 +1233,9 @@ static bool can_merge_rq(const struct i915_request *prev,
 	if (i915_request_completed(next))
 		return true;
 
+	if (i915_request_has_sentinel(prev))
+		return false;
+
 	if (!can_merge_ctx(prev->hw_context, next->hw_context))
 		return false;
 
@@ -1704,6 +1707,9 @@ static void execlists_dequeue(struct intel_engine_cs *engine)
 				if (last->hw_context == rq->hw_context)
 					goto done;
 
+				if (i915_request_has_sentinel(last))
+					goto done;
+
 				/*
 				 * If GVT overrides us we only ever submit
 				 * port[0], leaving port[1] empty. Note that we
diff --git a/drivers/gpu/drm/i915/i915_request.h b/drivers/gpu/drm/i915/i915_request.h
index 6a95242b280d..96991d64759c 100644
--- a/drivers/gpu/drm/i915/i915_request.h
+++ b/drivers/gpu/drm/i915/i915_request.h
@@ -216,8 +216,9 @@ struct i915_request {
 	unsigned long emitted_jiffies;
 
 	unsigned long flags;
-#define I915_REQUEST_WAITBOOST BIT(0)
-#define I915_REQUEST_NOPREEMPT BIT(1)
+#define I915_REQUEST_WAITBOOST	BIT(0)
+#define I915_REQUEST_NOPREEMPT	BIT(1)
+#define I915_REQUEST_SENTINEL	BIT(2)
 
 	/** timeline->request entry for this request */
 	struct list_head link;
@@ -440,6 +441,11 @@ static inline bool i915_request_has_nopreempt(const struct i915_request *rq)
 	return unlikely(rq->flags & I915_REQUEST_NOPREEMPT);
 }
 
+static inline bool i915_request_has_sentinel(const struct i915_request *rq)
+{
+	return unlikely(rq->flags & I915_REQUEST_SENTINEL);
+}
+
 static inline struct intel_timeline *
 i915_request_timeline(struct i915_request *rq)
 {
-- 
2.23.0

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

  parent reply	other threads:[~2019-10-06 16:50 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-06 16:49 [PATCH 01/12] drm/i915/execlists: Fix annotation for decoupling virtual request Chris Wilson
2019-10-06 16:49 ` [PATCH 02/12] drm/i915/selftests: Appease lockdep Chris Wilson
2019-10-06 16:49 ` [PATCH 03/12] drm/i915/gt: Restore dropped 'interruptible' flag Chris Wilson
2019-10-07 12:25   ` Tvrtko Ursulin
2019-10-06 16:49 ` [PATCH 04/12] drm/i915/gt: Treat a busy timeline as 'active' while waiting Chris Wilson
2019-10-07 17:00   ` Tvrtko Ursulin
2019-10-06 16:49 ` [PATCH 05/12] drm/i915: Expose engine properties via sysfs Chris Wilson
2019-10-06 16:49 ` [PATCH 06/12] drm/i915/execlists: Force preemption Chris Wilson
2019-10-06 16:49 ` Chris Wilson [this message]
2019-10-06 16:49 ` [PATCH 08/12] drm/i915/gt: Introduce barrier pulses along engines Chris Wilson
2019-10-06 16:49 ` [PATCH 09/12] drm/i915/execlists: Cancel banned contexts on schedule-out Chris Wilson
2019-10-06 16:50 ` [PATCH 10/12] drm/i915: Cancel non-persistent contexts on close Chris Wilson
2019-10-06 16:50 ` [PATCH 11/12] drm/i915: Replace hangcheck by heartbeats Chris Wilson
2019-10-06 16:50 ` [PATCH 12/12] drm/i915: Flush idle barriers when waiting Chris Wilson
2019-10-06 17:03 ` ✗ Fi.CI.CHECKPATCH: warning for series starting with [01/12] drm/i915/execlists: Fix annotation for decoupling virtual request Patchwork
2019-10-06 17:27 ` ✓ Fi.CI.BAT: success " Patchwork
2019-10-06 18:34 ` ✗ Fi.CI.IGT: failure " Patchwork

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20191006165002.30312-7-chris@chris-wilson.co.uk \
    --to=chris@chris-wilson.co.uk \
    --cc=intel-gfx@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.