From: "Thomas Hellström" <thomas.hellstrom@linux.intel.com>
To: intel-xe@lists.freedesktop.org
Cc: matthew.auld@intel.com
Subject: [Intel-xe] [PATCH v2 4/7] drm/xe: Introduce xe_engine_is_idle()
Date: Wed, 15 Mar 2023 16:55:04 +0100 [thread overview]
Message-ID: <20230315155507.43933-5-thomas.hellstrom@linux.intel.com> (raw)
In-Reply-To: <20230315155507.43933-1-thomas.hellstrom@linux.intel.com>
Introduce xe_engine_is_idle, and replace the static function in
xe_migrate.c.
The latter had two flaws. First the seqno == 1 test might return a false
true value each time the seqno counter wrapped, Second, the
cur_seqno == next_seqno test would never return true.
Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Reviewed-by: Matthew Auld <matthew.auld@intel.com>
---
drivers/gpu/drm/xe/xe_engine.c | 23 +++++++++++++++++++++++
drivers/gpu/drm/xe/xe_engine.h | 2 ++
drivers/gpu/drm/xe/xe_migrate.c | 8 +-------
3 files changed, 26 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_engine.c b/drivers/gpu/drm/xe/xe_engine.c
index 7e6367a84f1f..a4fc5afdf688 100644
--- a/drivers/gpu/drm/xe/xe_engine.c
+++ b/drivers/gpu/drm/xe/xe_engine.c
@@ -683,6 +683,29 @@ static void engine_kill_compute(struct xe_engine *e)
up_write(&e->vm->lock);
}
+/**
+ * xe_engine_is_idle() - Whether an engine is idle.
+ * @engine: The engine
+ *
+ * FIXME: Need to determine what to use as the short-lived
+ * timeline lock for the engines, so that the return value
+ * of this function becomes more than just an advisory
+ * snapshot in time. The timeline lock must protect the
+ * seqno from racing submissions on the same engine.
+ * Typically vm->resv, but user-created timeline locks use the migrate vm
+ * and never grabs the migrate vm->resv so we have a race there.
+ *
+ * Return: True if the engine is idle, false otherwise.
+ */
+bool xe_engine_is_idle(struct xe_engine *engine)
+{
+ if (XE_WARN_ON(xe_engine_is_parallel(engine)))
+ return false;
+
+ return xe_lrc_seqno(&engine->lrc[0]) ==
+ engine->lrc[0].fence_ctx.next_seqno - 1;
+}
+
void xe_engine_kill(struct xe_engine *e)
{
struct xe_engine *engine = e, *next;
diff --git a/drivers/gpu/drm/xe/xe_engine.h b/drivers/gpu/drm/xe/xe_engine.h
index a3a44534003f..1cf7f23c4afd 100644
--- a/drivers/gpu/drm/xe/xe_engine.h
+++ b/drivers/gpu/drm/xe/xe_engine.h
@@ -42,6 +42,8 @@ static inline bool xe_engine_is_parallel(struct xe_engine *engine)
return engine->width > 1;
}
+bool xe_engine_is_idle(struct xe_engine *engine);
+
void xe_engine_kill(struct xe_engine *e);
int xe_engine_create_ioctl(struct drm_device *dev, void *data,
diff --git a/drivers/gpu/drm/xe/xe_migrate.c b/drivers/gpu/drm/xe/xe_migrate.c
index 39ed63829224..dfdc88aa8910 100644
--- a/drivers/gpu/drm/xe/xe_migrate.c
+++ b/drivers/gpu/drm/xe/xe_migrate.c
@@ -1024,12 +1024,6 @@ static bool no_in_syncs(struct xe_sync_entry *syncs, u32 num_syncs)
return true;
}
-static bool engine_is_idle(struct xe_engine *e)
-{
- return !e || e->lrc[0].fence_ctx.next_seqno == 1 ||
- xe_lrc_seqno(&e->lrc[0]) == e->lrc[0].fence_ctx.next_seqno;
-}
-
/**
* xe_migrate_update_pgtables() - Pipelined page-table update
* @m: The migrate context.
@@ -1082,7 +1076,7 @@ xe_migrate_update_pgtables(struct xe_migrate *m,
bool first_munmap_rebind = vma && vma->first_munmap_rebind;
/* Use the CPU if no in syncs and engine is idle */
- if (no_in_syncs(syncs, num_syncs) && engine_is_idle(eng)) {
+ if (no_in_syncs(syncs, num_syncs) && (!eng || xe_engine_is_idle(eng))) {
fence = xe_migrate_update_pgtables_cpu(m, vm, bo, updates,
num_updates,
first_munmap_rebind,
--
2.39.2
next prev parent reply other threads:[~2023-03-15 15:55 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-15 15:55 [Intel-xe] [PATCH v2 0/7] Cpu page-table updates and fixes Thomas Hellström
2023-03-15 15:55 ` [Intel-xe] [PATCH v2 1/7] drm/xe: Use a define to set initial seqno for fences Thomas Hellström
2023-03-16 16:09 ` Matthew Brost
2023-03-16 16:45 ` Thomas Hellström
2023-03-15 15:55 ` [Intel-xe] [PATCH v2 2/7] drm/xe/migrate: Update cpu page-table updates Thomas Hellström
2023-03-15 15:55 ` [Intel-xe] [PATCH v2 3/7] drm/xe/tests: Support CPU page-table updates in the migrate test Thomas Hellström
2023-03-15 15:55 ` Thomas Hellström [this message]
2023-03-15 15:55 ` [Intel-xe] [PATCH v2 5/7] drm/xe: Use a small negative initial seqno Thomas Hellström
2023-03-15 15:55 ` [Intel-xe] [PATCH v2 6/7] drm/xe/tests: Test both CPU- and GPU page-table updates with the migrate test Thomas Hellström
2023-03-15 15:55 ` [Intel-xe] [PATCH v2 7/7] drm/xe/vm: Defer vm rebind until next exec if nothing to execute Thomas Hellström
2023-03-15 23:23 ` Matthew Brost
2023-03-15 15:58 ` [Intel-xe] ✓ CI.Patch_applied: success for Cpu page-table updates and fixes (rev2) Patchwork
2023-03-15 15:59 ` [Intel-xe] ✓ CI.KUnit: " Patchwork
2023-03-15 16:03 ` [Intel-xe] ✓ CI.Build: " Patchwork
2023-03-15 16:14 ` [Intel-xe] ○ CI.BAT: info " 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=20230315155507.43933-5-thomas.hellstrom@linux.intel.com \
--to=thomas.hellstrom@linux.intel.com \
--cc=intel-xe@lists.freedesktop.org \
--cc=matthew.auld@intel.com \
/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.