[v9, 4/4] tests/intel/xe_sysfs_scheduler: Assert sysfs params are restored
Cavitt, Jonathan
jonathan.cavitt at intel.com
Wed Dec 4 22:20:17 UTC 2024
-----Original Message-----
From: Kamil Konieczny <kamil.konieczny at linux.intel.com>
Sent: Wednesday, December 4, 2024 10:23 AM
To: Cavitt, Jonathan <jonathan.cavitt at intel.com>
Cc: igt-dev at lists.freedesktop.org; Gupta, saurabhg <saurabhg.gupta at intel.com>; Zuo, Alex <alex.zuo at intel.com>; Belgaumkar, Vinay <vinay.belgaumkar at intel.com>; Upadhyay, Tejas <tejas.upadhyay at intel.com>
Subject: Re: [v9,4/4] tests/intel/xe_sysfs_scheduler: Assert sysfs params are restored
>
> On 2024-12-03 at 22:32:13 +0000, Jonathan Cavitt wrote:
> > The xe_sysfs_scheduler tests modify various sysfs parameters. At the
> > end of the test, the sysfs parameters are restored, but we do not
> > currently assert that the restoration process completes successfully.
> > Assert the restoration is successful.
> >
> > Additionally, when the tests fail, it is possible that the various
> > modified sysfs parameters may be left in modified states, which can
> > cause future tests to behave unpredictably. At the end of the test,
> > attempt to restore all modified sysfs parameters to their original
> > values, aborting all tests if this is unsuccessful.
> >
> > v2:
> > - Store engine lists (Kamil)
> >
> > Signed-off-by: Jonathan Cavitt <jonathan.cavitt at intel.com>
>
> Reviewed-by: Kamil Konieczny <kamil.konieczny at linux.intel.com>
Thank you for the reviews! I just noticed a small formatting error in patch 3 that I'd
like to repair before this is pushed, so give me a moment to fix that and submit the final
revision with those RBs applied.
-Jonathan Cavitt
>
> +cc Tejas
>
> > ---
> > tests/intel/xe_sysfs_scheduler.c | 89 ++++++++++++++++++++++++++++----
> > 1 file changed, 79 insertions(+), 10 deletions(-)
> >
> > diff --git a/tests/intel/xe_sysfs_scheduler.c b/tests/intel/xe_sysfs_scheduler.c
> > index 947dbdbc9b..89c87c2eed 100644
> > --- a/tests/intel/xe_sysfs_scheduler.c
> > +++ b/tests/intel/xe_sysfs_scheduler.c
> > @@ -107,10 +107,19 @@ static void test_min_max(int xe, int engine, const char **property,
> >
> > /* Reset property, max, min to original values */
> > igt_sysfs_printf(engine, property[0], "%d", store);
> > + igt_sysfs_scanf(engine, property[0], "%u", &set);
> > + igt_assert_eq(set, store);
> > +
> > igt_sysfs_printf(engine, property[1], "%d", default_min);
> > + igt_sysfs_scanf(engine, property[1], "%u", &set);
> > + igt_assert_eq(set, default_min);
> > +
> > igt_sysfs_printf(engine, property[2], "%d", default_max);
> > + igt_sysfs_scanf(engine, property[2], "%u", &set);
> > + igt_assert_eq(set, default_max);
> > }
> >
> > +#define MAX_GTS 8
> > igt_main
> > {
> > static const struct {
> > @@ -126,10 +135,15 @@ igt_main
> > {"timeslice_duration_us", "timeslice_duration_min", "timeslice_duration_max"},
> > {"job_timeout_ms", "job_timeout_min", "job_timeout_max"},
> > };
> > +
> > + unsigned int store[MAX_GTS][3][3];
> > int count = sizeof(property) / sizeof(property[0]);
> > + int gt_count = 0;
> > int xe = -1;
> > int sys_fd;
> > int gt;
> > + int engines_fd[MAX_GTS], gt_fd[MAX_GTS];
> > + int *engine_list[MAX_GTS];
> >
> > igt_fixture {
> > xe = drm_open_driver(DRIVER_XE);
> > @@ -138,28 +152,83 @@ igt_main
> > sys_fd = igt_sysfs_open(xe);
> > igt_require(sys_fd != -1);
> > close(sys_fd);
> > +
> > + xe_for_each_gt(xe, gt) {
> > + int *list, i = 0;
> > +
> > + igt_require(gt_count < MAX_GTS);
> > +
> > + gt_fd[gt_count] = xe_sysfs_gt_open(xe, gt);
> > + igt_require(gt_fd[gt_count] != -1);
> > + engines_fd[gt_count] = openat(gt_fd[gt_count], "engines", O_RDONLY);
> > + igt_require(engines_fd[gt_count] != -1);
> > +
> > + list = igt_sysfs_get_engine_list(engines_fd[gt_count]);
> > +
> > + while (list[i] != -1) {
> > + for (int j = 0; j < count; j++) {
> > + const char **pl = property[j];
> > +
> > + for (int k = 0; k < 3; k++) {
> > + unsigned int *loc = &store[i][j][k];
> > +
> > + igt_require(igt_sysfs_scanf(list[i], pl[k],
> > + "%u", loc) == 1);
> > + }
> > + }
> > + i++;
> > + }
> > +
> > + igt_require(i > 0);
> > + engine_list[gt_count] = list;
> > + gt_count++;
> > + }
> > }
> >
> > for (int i = 0; i < count; i++) {
> > for (typeof(*tests) *t = tests; t->name; t++) {
> > igt_subtest_with_dynamic_f("%s-%s", property[i][0], t->name) {
> > + int j = 0;
> > xe_for_each_gt(xe, gt) {
> > - int engines_fd = -1;
> > - int gt_fd = -1;
> > -
> > - gt_fd = xe_sysfs_gt_open(xe, gt);
> > - igt_require(gt_fd != -1);
> > - engines_fd = openat(gt_fd, "engines", O_RDONLY);
> > - igt_require(engines_fd != -1);
> > + int e = engines_fd[j];
> >
> > - igt_sysfs_engines(xe, engines_fd, 0, 0, property[i], t->fn);
> > - close(engines_fd);
> > - close(gt_fd);
> > + igt_sysfs_engines(xe, e, 0, 0, property[i], t->fn);
> > + j++;
> > }
> > }
> > }
> > }
> > +
> > igt_fixture {
> > + for (int gtn = gt_count - 1; gtn >= 0; gtn--) {
> > + int *list, i = 0;
> > +
> > + list = engine_list[gtn];
> > +
> > + while (list[i] != -1) {
> > + int e = list[i];
> > +
> > + for (int j = count - 1; j >= 0; j--) {
> > + const char **pl = property[j];
> > +
> > + for (int k = 2; k >= 0; k--) {
> > + unsigned int read = UINT_MAX;
> > + unsigned int val = store[i][j][k];
> > +
> > + igt_sysfs_printf(e, pl[k], "%u", val);
> > + igt_sysfs_scanf(e, pl[k], "%u", &read);
> > + igt_abort_on_f(read != val,
> > + "%s not restored!\n", pl[k]);
> > + }
> > + }
> > + i++;
> > + }
> > +
> > + igt_sysfs_free_engine_list(list);
> > + close(engines_fd[gtn]);
> > + close(gt_fd[gtn]);
> > + }
> > +
> > xe_device_put(xe);
> > close(xe);
> > }
>
More information about the igt-dev
mailing list