[igt-dev] [PATCH i-g-t 14/23] i915/perf: Add a test for non-power-of-2 oa reports
Umesh Nerlige Ramappa
umesh.nerlige.ramappa at intel.com
Mon Aug 22 23:56:48 UTC 2022
Some OA report sizes are no longer a power of 2. Verify that such
reports can be correctly read across the OA buffer boundaries.
Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa at intel.com>
---
tests/i915/perf.c | 34 +++++++++++++++++++++++++---------
1 file changed, 25 insertions(+), 9 deletions(-)
diff --git a/tests/i915/perf.c b/tests/i915/perf.c
index d601eb36..3caf7cac 100644
--- a/tests/i915/perf.c
+++ b/tests/i915/perf.c
@@ -2681,7 +2681,7 @@ test_buffer_fill(void)
}
static void
-test_non_zero_reason(void)
+test_multi_buffer_fills(uint64_t format, uint64_t oa_buf_size, bool load)
{
/* ~20 micro second period */
int oa_exponent = max_oa_exponent_for_period_lte(20000);
@@ -2691,7 +2691,7 @@ test_non_zero_reason(void)
/* OA unit configuration */
DRM_I915_PERF_PROP_OA_METRICS_SET, test_set->perf_oa_metrics_set,
- DRM_I915_PERF_PROP_OA_FORMAT, test_set->perf_oa_format,
+ DRM_I915_PERF_PROP_OA_FORMAT, format,
DRM_I915_PERF_PROP_OA_EXPONENT, oa_exponent,
};
struct drm_i915_perf_open_param param = {
@@ -2700,7 +2700,9 @@ test_non_zero_reason(void)
.properties_ptr = to_user_pointer(properties),
};
struct drm_i915_perf_record_header *header;
- uint32_t buf_size = 3 * 65536 * (256 + sizeof(struct drm_i915_perf_record_header));
+ size_t report_size = get_oa_format(format).size;
+ uint32_t buf_size = 3 * (oa_buf_size / report_size) *
+ (report_size + sizeof(struct drm_i915_perf_record_header));
uint8_t *buf = malloc(buf_size);
uint32_t total_len = 0, reports_lost;
const uint32_t *last_report;
@@ -2710,8 +2712,10 @@ test_non_zero_reason(void)
igt_debug("Ready to read about %u bytes\n", buf_size);
- load_helper_init();
- load_helper_run(HIGH);
+ if (load) {
+ load_helper_init();
+ load_helper_run(HIGH);
+ }
stream_fd = __perf_open(drm_fd, ¶m, true /* prevent_pm */);
@@ -2724,8 +2728,10 @@ test_non_zero_reason(void)
__perf_close(stream_fd);
- load_helper_stop();
- load_helper_fini();
+ if (load) {
+ load_helper_stop();
+ load_helper_fini();
+ }
igt_debug("Got %u bytes\n", total_len);
@@ -2747,7 +2753,7 @@ test_non_zero_reason(void)
if (last_report) {
sanity_check_reports(last_report, report,
- test_set->perf_oa_format);
+ format);
}
last_report = report;
break;
@@ -5137,6 +5143,14 @@ igt_main
igt_subtest("oa-formats")
test_oa_formats();
+ igt_describe("Test OA buffer for non power of 2 report sizes");
+ igt_subtest("non-power-of-2-oa-formats") {
+ igt_require(IS_DG2(devid));
+ test_multi_buffer_fills(I915_OA_FORMAT_A38u64_R2u64_B8_C8,
+ MAX_OA_BUF_SIZE,
+ false);
+ }
+
igt_subtest("invalid-oa-exponent")
test_invalid_oa_exponent();
igt_subtest("low-oa-exponent-permissions")
@@ -5156,7 +5170,9 @@ igt_main
igt_subtest("non-zero-reason") {
/* Reason field is only available on Gen8+ */
igt_require(intel_gen(devid) >= 8);
- test_non_zero_reason();
+ test_multi_buffer_fills(test_set->perf_oa_format,
+ MAX_OA_BUF_SIZE,
+ true);
}
igt_subtest("disabled-read-error")
--
2.25.1
More information about the igt-dev
mailing list