From: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
To: igt-dev@lists.freedesktop.org, Ashutosh Dixit <ashutosh.dixit@intel.com>
Subject: [PATCH i-g-t v2 07/14] tests/intel/xe_oa: Rewrite the polling small buf test
Date: Mon, 3 Mar 2025 15:14:55 -0800 [thread overview]
Message-ID: <20250303231502.135720-8-umesh.nerlige.ramappa@intel.com> (raw)
In-Reply-To: <20250303231502.135720-1-umesh.nerlige.ramappa@intel.com>
The polling-small-buf test is specifically testing that POLLIN is still
set after an ENOSPC error. In the buggy code, POLLIN was cleared on
the ENOSPC error even though there was data to be read. The test was
putting an upper bound on the number of bytes read in a fixed duration
of time. While this worked, we had occassional failures that were due to
scheduling and other dependencies outside the scope of this test.
In an attempt to make the test more robust,
- use a more definitive method to wait for few reports
- force an ENOSPC error using a small buffer
- Ensure POLLIN is still set in the subsequent poll() call
v2:
- Add "why" in commit message (Ashutosh)
- Use uapi to wait for N reports
Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
---
tests/intel/xe_oa.c | 53 ++++++++++++++++++++-------------------------
1 file changed, 23 insertions(+), 30 deletions(-)
diff --git a/tests/intel/xe_oa.c b/tests/intel/xe_oa.c
index 08406ca5c..dd16b39a9 100644
--- a/tests/intel/xe_oa.c
+++ b/tests/intel/xe_oa.c
@@ -2216,7 +2216,6 @@ static void test_polling(uint64_t requested_oa_period,
*/
static void test_polling_small_buf(void)
{
- int oa_exponent = max_oa_exponent_for_period_lte(40 * 1000); /* 40us */
uint64_t properties[] = {
DRM_XE_OA_PROPERTY_OA_UNIT_ID, 0,
@@ -2226,50 +2225,44 @@ static void test_polling_small_buf(void)
/* OA unit configuration */
DRM_XE_OA_PROPERTY_OA_METRIC_SET, default_test_set->perf_oa_metrics_set,
DRM_XE_OA_PROPERTY_OA_FORMAT, __ff(default_test_set->perf_oa_format),
- DRM_XE_OA_PROPERTY_OA_PERIOD_EXPONENT, oa_exponent,
+ DRM_XE_OA_PROPERTY_OA_PERIOD_EXPONENT, oa_exponent_default,
+ DRM_XE_OA_PROPERTY_WAIT_NUM_REPORTS, 5,
DRM_XE_OA_PROPERTY_OA_DISABLED, true,
};
struct intel_xe_oa_open_prop param = {
.num_properties = ARRAY_SIZE(properties) / 2,
.properties_ptr = to_user_pointer(properties),
};
- uint32_t test_duration = 80 * 1000 * 1000;
- int sample_size = get_oa_format(default_test_set->perf_oa_format).size;
- int n_expected_reports = test_duration / oa_exponent_to_ns(oa_exponent);
- int n_expect_read_bytes = n_expected_reports * sample_size;
- struct timespec ts = {};
- int n_bytes_read = 0;
- uint32_t n_polls = 0;
+ struct pollfd pollfd;
+ uint8_t buf[10];
+ int ret;
stream_fd = __perf_open(drm_fd, ¶m, true /* prevent_pm */);
set_fd_flags(stream_fd, O_CLOEXEC | O_NONBLOCK);
- do_ioctl(stream_fd, DRM_XE_OBSERVATION_IOCTL_ENABLE, 0);
- while (igt_nsec_elapsed(&ts) < test_duration) {
- struct pollfd pollfd = { .fd = stream_fd, .events = POLLIN };
-
- ppoll(&pollfd, 1, NULL, NULL);
- if (pollfd.revents & POLLIN) {
- uint8_t buf[1024];
- int ret;
+ /* Kickstart the capture */
+ do_ioctl(stream_fd, DRM_XE_OBSERVATION_IOCTL_ENABLE, 0);
- ret = read(stream_fd, buf, sizeof(buf));
- if (ret >= 0)
- n_bytes_read += ret;
- }
+ /*
+ * Wait for number of reports specified in
+ * DRM_XE_OA_PROPERTY_WAIT_NUM_REPORTS
+ */
+ pollfd.fd = stream_fd;
+ pollfd.events = POLLIN;
+ poll(&pollfd, 1, -1);
+ igt_assert(pollfd.revents & POLLIN);
- n_polls++;
- }
+ /* Just read one report and expect ENOSPC */
+ errno = 0;
+ ret = read(stream_fd, buf, sizeof(buf));
+ igt_assert_eq(ret, -1);
+ igt_assert_eq(errno, ENOSPC);
- igt_info("Read %d expected %d (%.2f%% of the expected number), polls=%u\n",
- n_bytes_read, n_expect_read_bytes,
- n_bytes_read * 100.0f / n_expect_read_bytes,
- n_polls);
+ /* Poll with 0 timeout and expect POLLIN flag to be set */
+ poll(&pollfd, 1, 0);
+ igt_assert(pollfd.revents & POLLIN);
__perf_close(stream_fd);
-
- igt_assert(abs(n_expect_read_bytes - n_bytes_read) <
- 0.20 * n_expect_read_bytes);
}
static int
--
2.34.1
next prev parent reply other threads:[~2025-03-03 23:15 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-03 23:14 [PATCH i-g-t v2 00/14] Some refactor, rewrite and fixes for OA tests Umesh Nerlige Ramappa
2025-03-03 23:14 ` [PATCH i-g-t v2 01/14] tests/intel/xe_oa: Use static for global variables Umesh Nerlige Ramappa
2025-03-03 23:14 ` [PATCH i-g-t v2 02/14] tests/intel/xe_oa: Drop unused macro Umesh Nerlige Ramappa
2025-03-03 23:14 ` [PATCH i-g-t v2 03/14] tests/intel/xe_oa: Use period_ns in max_oa_exponent_for_period_lte Umesh Nerlige Ramappa
2025-03-03 23:38 ` Dixit, Ashutosh
2025-03-03 23:14 ` [PATCH i-g-t v2 04/14] tests/intel/xe_oa: Rename oa_exp_1_millisec to oa_exponent_default Umesh Nerlige Ramappa
2025-03-03 23:14 ` [PATCH i-g-t v2 05/14] tests/intel/xe_oa: Use default exponent for some tests Umesh Nerlige Ramappa
2025-03-03 23:14 ` [PATCH i-g-t v2 06/14] tests/intel/xe_oa: Use same render copy width and height across tests Umesh Nerlige Ramappa
2025-03-03 23:14 ` Umesh Nerlige Ramappa [this message]
2025-03-04 0:05 ` [PATCH i-g-t v2 07/14] tests/intel/xe_oa: Rewrite the polling small buf test Dixit, Ashutosh
2025-03-03 23:14 ` [PATCH i-g-t v2 08/14] tests/intel/xe_oa: Simplify the buffer-fill test Umesh Nerlige Ramappa
2025-03-04 0:17 ` Dixit, Ashutosh
2025-03-04 0:28 ` Dixit, Ashutosh
2025-03-04 15:11 ` Dixit, Ashutosh
2025-03-03 23:14 ` [PATCH i-g-t v2 09/14] tests/intel/xe_oa: Use default buffer size for non-zero reason Umesh Nerlige Ramappa
2025-03-03 23:14 ` [PATCH i-g-t v2 10/14] tests/intel/xe_oa: Test oa buffer sizes Umesh Nerlige Ramappa
2025-03-03 23:14 ` [PATCH i-g-t v2 11/14] tests/intel/xe_oa: Rewrite enable-disable test Umesh Nerlige Ramappa
2025-03-04 0:51 ` Dixit, Ashutosh
2025-03-04 15:04 ` Dixit, Ashutosh
2025-03-03 23:15 ` [PATCH i-g-t v2 12/14] tests/intel/xe_oa: Enable unprivileged-single-ctx-counters and fix it Umesh Nerlige Ramappa
2025-03-03 23:15 ` [PATCH i-g-t v2 13/14] tests/intel/xe_oa: Fix mmio_trigger_reports testing Umesh Nerlige Ramappa
2025-03-03 23:15 ` [PATCH i-g-t v2 14/14] tests/intel/xe_oa: Set boundaries for OA exponent test Umesh Nerlige Ramappa
2025-03-04 1:56 ` ✓ Xe.CI.BAT: success for Some refactor, rewrite and fixes for OA tests (rev2) Patchwork
2025-03-04 2:09 ` ✗ i915.CI.BAT: failure " Patchwork
2025-03-04 6:07 ` ✗ Xe.CI.Full: " 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=20250303231502.135720-8-umesh.nerlige.ramappa@intel.com \
--to=umesh.nerlige.ramappa@intel.com \
--cc=ashutosh.dixit@intel.com \
--cc=igt-dev@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox