[PATCH i-g-t v3 1/5] tests/intel/xe_pmu: Validate engine activity on gt reset
Riana Tauro
riana.tauro at intel.com
Fri Jun 6 10:10:04 UTC 2025
Add a test to validate engine activity is idle/showing load after gt reset.
Signed-off-by: Riana Tauro <riana.tauro at intel.com>
---
tests/intel/xe_pmu.c | 47 ++++++++++++++++++++++++++++++++++++++------
1 file changed, 41 insertions(+), 6 deletions(-)
diff --git a/tests/intel/xe_pmu.c b/tests/intel/xe_pmu.c
index 02f23bd7d..d9b0d2c96 100644
--- a/tests/intel/xe_pmu.c
+++ b/tests/intel/xe_pmu.c
@@ -40,6 +40,12 @@
* Description: Test to validate engine activity by running workload on all engines
* simultaneously and trailing idle
*
+ * SUBTEST: engine-activity-gt-reset-idle
+ * Description: Test to validate engine activity is idle after gt reset
+ *
+ * SUBTEST: engine-activity-gt-reset
+ * Description: Test to validate engine activity on all engines before and after gt reset
+ *
* SUBTEST: engine-activity-most-load
* Description: Test to validate engine activity by running workload on all engines except one
*
@@ -75,6 +81,7 @@
#define TEST_LOAD BIT(0)
#define TEST_TRAILING_IDLE BIT(1)
#define TEST_IDLE BIT(2)
+#define TEST_GT_RESET BIT(3)
const double tolerance = 0.1;
static char xe_device[NAME_MAX];
@@ -238,7 +245,10 @@ static void engine_activity(int fd, struct drm_xe_engine_class_instance *eci, un
end_cork(fd, cork);
pmu_read_multi(pmu_fd[0], 2, after);
- end_cork(fd, cork);
+ if (flags & TEST_GT_RESET)
+ xe_force_gt_reset_sync(fd, eci->gt_id);
+ else
+ end_cork(fd, cork);
engine_active_ticks = after[0] - before[0];
engine_total_ticks = after[1] - before[1];
@@ -248,6 +258,24 @@ static void engine_activity(int fd, struct drm_xe_engine_class_instance *eci, un
igt_debug("Engine total ticks: after %ld, before %ld delta %ld\n", after[1], before[1],
engine_total_ticks);
+ if (flags & TEST_LOAD)
+ assert_within_epsilon(engine_active_ticks, engine_total_ticks, tolerance);
+ else
+ igt_assert(!engine_active_ticks);
+
+ if (flags & TEST_GT_RESET) {
+ pmu_read_multi(pmu_fd[0], 2, before);
+ usleep(SLEEP_DURATION * USEC_PER_SEC);
+ pmu_read_multi(pmu_fd[0], 2, after);
+
+ engine_active_ticks = after[0] - before[0];
+
+ igt_debug("Engine active ticks after gt reset: after %ld, before %ld delta %ld\n",
+ after[0], before[0], engine_active_ticks);
+
+ igt_assert(!engine_active_ticks);
+ }
+
if (cork)
xe_cork_destroy(fd, cork);
@@ -255,11 +283,6 @@ static void engine_activity(int fd, struct drm_xe_engine_class_instance *eci, un
close(pmu_fd[0]);
close(pmu_fd[1]);
-
- if (flags & TEST_LOAD)
- assert_within_epsilon(engine_active_ticks, engine_total_ticks, tolerance);
- else
- igt_assert(!engine_active_ticks);
}
static void engine_activity_load_single(int fd, int num_engines,
@@ -812,6 +835,18 @@ igt_main
igt_subtest("engine-activity-all-load-idle")
engine_activity_load_all(fd, num_engines, TEST_LOAD | TEST_TRAILING_IDLE);
+ igt_describe("Validate engine activity is idle after gt reset");
+ test_each_engine("engine-activity-gt-reset-idle", fd, eci)
+ engine_activity(fd, eci, TEST_LOAD | TEST_GT_RESET);
+
+ igt_describe("Validate engine activity before and after gt reset");
+ igt_subtest("engine-activity-gt-reset") {
+ engine_activity_load_all(fd, num_engines, TEST_LOAD);
+ xe_for_each_gt(fd, gt)
+ xe_force_gt_reset_sync(fd, gt);
+ engine_activity_load_all(fd, num_engines, TEST_LOAD);
+ }
+
igt_subtest_group {
unsigned int num_fns;
--
2.47.1
More information about the igt-dev
mailing list