Igt-dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [igt-dev] [PATCH i-g-t] tests/xe/xe_intel_bb: ensure valid next page
@ 2023-06-02 11:48 Matthew Auld
  2023-06-02 14:23 ` [igt-dev] ✓ Fi.CI.BAT: success for " Patchwork
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Matthew Auld @ 2023-06-02 11:48 UTC (permalink / raw)
  To: igt-dev; +Cc: Thomas Hellström, intel-xe

Due to over-fetch, recommendation is to ensure we have a single valid
extra page beyond the batch. We currently lack this which seems to
explain why xe_intel_bb@full-batch generates CAT errors.

Currently we allow using the last GTT page, but this looks to be no-go,
since the next page will be beyond the actual GTT, in the case of
full-batch. The i915 path looks to already account for this. However
even with that fixed, Xe doesn't use scratch pages by default so the
next page will still not be valid.

With Xe rather expect that callers know about HW over-fetch, ensuring
that the batch has an extra page, if needed. Alternatively we could
apply the DRM_XE_VM_CREATE_SCRATCH_PAGE when creating the vm, but really
we want to get away from such things.

Bspec: 60223
Closes: https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/262
Signed-off-by: Matthew Auld <matthew.auld@intel.com>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
---
 lib/intel_batchbuffer.c | 6 ++++++
 tests/xe/xe_intel_bb.c  | 8 +++++++-
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/lib/intel_batchbuffer.c b/lib/intel_batchbuffer.c
index 3cd680072..035facfc4 100644
--- a/lib/intel_batchbuffer.c
+++ b/lib/intel_batchbuffer.c
@@ -881,6 +881,12 @@ static inline uint64_t __intel_bb_get_offset(struct intel_bb *ibb,
  * passed in. If this is the case, it copies the information over to the
  * newly created batch buffer.
  *
+ * NOTE: On Xe scratch pages are not used by default. Due to over-fetch (~512
+ * bytes) there might need to be a valid next page to avoid hangs or CAT errors
+ * if the batch is quite large and approaches the end boundary of the batch
+ * itself.  Inflate the @size to ensure there is a valid next page in such
+ * cases.
+ *
  * Returns:
  *
  * Pointer the intel_bb, asserts on failure.
diff --git a/tests/xe/xe_intel_bb.c b/tests/xe/xe_intel_bb.c
index 755cc530e..af8462af5 100644
--- a/tests/xe/xe_intel_bb.c
+++ b/tests/xe/xe_intel_bb.c
@@ -952,7 +952,13 @@ static void full_batch(struct buf_ops *bops)
 	struct intel_bb *ibb;
 	int i;
 
-	ibb = intel_bb_create(xe, PAGE_SIZE);
+	/*
+	 * Add an extra page to ensure over-fetch always sees a valid next page,
+	 * which includes not going beyond the actual GTT, and ensuring we have
+	 * a valid GTT entry, given that on xe we don't use scratch pages by
+	 * default.
+	 */
+	ibb = intel_bb_create(xe, 2 * PAGE_SIZE);
 	if (debug_bb)
 		intel_bb_set_debug(ibb, true);
 
-- 
2.40.1

^ permalink raw reply related	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2023-06-07 11:14 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-06-02 11:48 [igt-dev] [PATCH i-g-t] tests/xe/xe_intel_bb: ensure valid next page Matthew Auld
2023-06-02 14:23 ` [igt-dev] ✓ Fi.CI.BAT: success for " Patchwork
2023-06-04 17:38 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
2023-06-07  9:55 ` [igt-dev] [Intel-xe] [PATCH i-g-t] " Zbigniew Kempczyński
2023-06-07 10:27   ` Matthew Auld
2023-06-07 11:09     ` Zbigniew Kempczyński
2023-06-07 11:14       ` Matthew Auld
2023-06-07 10:01 ` [igt-dev] ✗ Fi.CI.BUILD: failure for tests/xe/xe_intel_bb: ensure valid next page (rev2) Patchwork

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox