[PATCH i-g-t v3 1/2] tests/intel/xe_oa: Clean up buffer-fill test

Umesh Nerlige Ramappa umesh.nerlige.ramappa at intel.com
Thu Aug 28 21:49:06 UTC 2025


Checking for overflow status before enabling the OA buffer is always
going to return false. Drop the logic.

Move out core buffer overflow check to a helper for reuse by other tests
when needed.

Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa at intel.com>
---
 tests/intel/xe_oa.c | 36 ++++++++++++++++++++----------------
 1 file changed, 20 insertions(+), 16 deletions(-)

diff --git a/tests/intel/xe_oa.c b/tests/intel/xe_oa.c
index 1826623ab864..3b3cdf9314c2 100644
--- a/tests/intel/xe_oa.c
+++ b/tests/intel/xe_oa.c
@@ -2488,6 +2488,25 @@ test_oa_tlb_invalidate(const struct drm_xe_engine_class_instance *hwe)
 	igt_assert(num_reports2 > 0.95 * num_expected_reports);
 }
 
+/*
+ * This is a blocking read trying to read 0 bytes, so it will return ENOSPC
+ * until there is data available. Once the OA buffer overflows, we should see an
+ * EIO with the oevrflow status set.
+ */
+static void
+wait_for_oa_buffer_overflow(int fd, int poll_period_us)
+{
+	char buf;
+
+	while (-1 == read(fd, &buf, 0)) {
+		if (errno == EIO &&
+		    get_stream_status(fd) & DRM_XE_OASTATUS_BUFFER_OVERFLOW)
+			return;
+
+		usleep(poll_period_us);
+	}
+}
+
 /**
  * SUBTEST: buffer-fill
  * Description: Test filling and overflow of OA buffer
@@ -2526,24 +2545,9 @@ test_buffer_fill(const struct drm_xe_engine_class_instance *hwe)
 	stream_fd = __perf_open(drm_fd, &param, true /* prevent_pm */);
         set_fd_flags(stream_fd, O_CLOEXEC);
 
-	/* OA buffer is disabled, we do not expect any error status */
-	oa_status = get_stream_status(stream_fd);
-	overflow_seen = oa_status & DRM_XE_OASTATUS_BUFFER_OVERFLOW;
-	igt_assert_eq(overflow_seen, 0);
-
 	do_ioctl(stream_fd, DRM_XE_OBSERVATION_IOCTL_ENABLE, 0);
 
-	/* Read 0 bytes repeatedly until you see an EIO */
-	while (-1 == read(stream_fd, buf, 0)) {
-		if (errno == EIO) {
-			oa_status = get_stream_status(stream_fd);
-			overflow_seen = oa_status & DRM_XE_OASTATUS_BUFFER_OVERFLOW;
-			if (overflow_seen)
-				break;
-		}
-		usleep(100);
-	}
-	igt_assert(overflow_seen);
+	wait_for_oa_buffer_overflow(stream_fd, 100);
 
 	/* Make sure the buffer overflow is cleared */
 	read(stream_fd, buf, 0);
-- 
2.43.0



More information about the igt-dev mailing list