[PATCH i-g-t v3 1/5] tests/intel/xe_pmu: Validate engine activity on gt reset
Umesh Nerlige Ramappa
umesh.nerlige.ramappa at intel.com
Mon Jun 9 16:37:23 UTC 2025
On Fri, Jun 06, 2025 at 03:40:04PM +0530, Riana Tauro wrote:
>Add a test to validate engine activity is idle/showing load after gt reset.
>
>Signed-off-by: Riana Tauro <riana.tauro at intel.com>
Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa 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