[igt-dev] [PATCH i-g-t 3/5] xe/xe_sysfs_preempt_timeout: Verify preempt_timeout
Kamil Konieczny
kamil.konieczny at linux.intel.com
Tue Jun 27 16:09:33 UTC 2023
Hi Priyanka,
On 2023-06-25 at 17:59:46 +0530, priyanka.dandamudi at intel.com wrote:
> From: Priyanka Dandamudi <priyanka.dandamudi at intel.com>
>
> Basic tests idempotent and invalid are added to verify
> preempt_timeout for each engine.
> It verifies whether parameter value within in the range.
>
> Cc: Janga Rahul Kumar <janga.rahul.kumar at intel.com>
> Cc: Tejas Upadhyay <tejas.upadhyay at intel.com>
> Signed-off-by: Priyanka Dandamudi <priyanka.dandamudi at intel.com>
> ---
> tests/meson.build | 1 +
> tests/xe/xe_sysfs_preempt_timeout.c | 139 ++++++++++++++++++++++++++++
> 2 files changed, 140 insertions(+)
> create mode 100644 tests/xe/xe_sysfs_preempt_timeout.c
>
> diff --git a/tests/meson.build b/tests/meson.build
> index b24bae5c..ea6c9239 100644
> --- a/tests/meson.build
> +++ b/tests/meson.build
> @@ -271,6 +271,7 @@ xe_progs = [
> 'xe_waitfence',
> 'xe_spin_batch',
> 'xe_sysfs_defaults',
> + 'xe_sysfs_preempt_timeout',
Why not just one test xe_sysfs_scheduler and adding more subtests
into it? So we can limit number of files.
> ]
>
> msm_progs = [
> diff --git a/tests/xe/xe_sysfs_preempt_timeout.c b/tests/xe/xe_sysfs_preempt_timeout.c
> new file mode 100644
> index 00000000..5a357128
> --- /dev/null
> +++ b/tests/xe/xe_sysfs_preempt_timeout.c
> @@ -0,0 +1,139 @@
> +/*
> + * Copyright © 2023 Intel Corporation
> + *
> + * Permission is hereby ggit ranted, free of charge, to any person obtaining a
Same here, use SPDX.
> + * copy of this software and associated documentation files (the "Software"),
> + * to deal in the Software without restriction, including without limitation
> + * the rights to use, copy, modify, merge, publish, distribute, sublicense,
> + * and/or sell copies of the Software, and to permit persons to whom the
> + * Software is furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice (including the next
> + * paragraph) shall be included in all copies or substantial portions of the
> + * Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
> + * IN THE SOFTWARE.
> + */
> +
> +#include <dirent.h>
> +#include <sys/types.h>
> +#include <sys/stat.h>
> +#include <unistd.h>
> +
> +#include "igt.h"
> +#include "igt_sysfs.h"
> +
> +#include "xe_drm.h"
> +#include "xe/xe_query.h"
> +
> +/**
> + * TEST: xe sysfs preempt timeout
> + * Run type: FULL
> + *
> + * SUBTEST: idempotent
> + * Description: Test to check whether the preempt_timeout_us parameter reports the values set.
> + * Test category: SysMan
> + *
> + * SUBTEST: invalid
> + * Description: Test to check if preempt_timeout parameter rejects any unrepresentable intervals.
> + * Test category: SysMan
> + */
> +
> +#define ATTR "preempt_timeout_us"
> +#define ATTR_MIN "preempt_timeout_min"
> +#define ATTR_MAX "preempt_timeout_max"
> +
> +static void set_preempt_timeout(int engine, unsigned int value)
> +{
> + unsigned int delay;
> +
> + igt_assert_lte(0, igt_sysfs_printf(engine, ATTR, "%u", value));
> + igt_sysfs_scanf(engine, ATTR, "%u", &delay);
> + igt_assert_eq(delay, value);
> +}
> +
> +static void test_idempotent(int xe, int engine)
> +{
> + unsigned int delays[] = { 1, 1000, 1234, 54321 };
> + unsigned int saved;
> +
> + igt_assert(igt_sysfs_scanf(engine, ATTR, "%u", &saved) == 1);
> + igt_debug("Initial %s:%u\n", ATTR, saved);
> +
> + for (int i = 0; i < ARRAY_SIZE(delays); i++)
> + set_preempt_timeout(engine, delays[i]);
> +
> + set_preempt_timeout(engine, saved);
> +}
> +
> +static void test_invalid(int xe, int engine)
> +{
> + unsigned int saved, set;
> + unsigned int min, max;
> +
> + igt_sysfs_scanf(engine, ATTR_MAX, "%u", &max);
> + igt_sysfs_scanf(engine, ATTR_MIN, "%u", &min);
> +
> + igt_assert(igt_sysfs_scanf(engine, ATTR, "%u", &saved) == 1);
> + igt_debug("Initial %s:%u\n", ATTR, saved);
> +
> + igt_sysfs_printf(engine, ATTR, "%d", max+1);
> + igt_sysfs_scanf(engine, ATTR, "%u", &set);
> + igt_assert_eq(set, saved);
> +
> + igt_sysfs_printf(engine, ATTR, "%d", min-1);
> + igt_sysfs_scanf(engine, ATTR, "%u", &set);
> + igt_assert_eq(set, saved);
> +}
> +
> +igt_main
> +{
> + static const struct {
> + const char *name;
> + void (*fn)(int, int);
> + } tests[] = {
> + { "idempotent", test_idempotent },
> + { "invalid", test_invalid },
> + { }
> + };
> + int xe = -1;
> + int sys;
> + int gt;
> +
> + igt_fixture {
> + xe = drm_open_driver(DRIVER_XE);
> + xe_device_get(xe);
> +
> + sys = igt_sysfs_open(xe);
> + igt_require(sys != -1);
> + }
> +
> + for (typeof(*tests) *t = tests; t->name; t++)
> + igt_subtest_with_dynamic(t->name) {
> + xe_for_each_gt(xe, gt) {
> + int engines = -1;
> + char buf[100];
> +
> + sprintf(buf, "device/gt%d/engines", gt);
> + engines = openat(sys, buf, O_RDONLY);
> + igt_require(engines != -1);
> +
> + igt_sysfs_engines(xe, engines, ATTR, t->fn);
> +
> + close(engines);
> + }
> + }
> +
> + igt_fixture {
> + close(sys);
> + xe_device_put(xe);
> + close(xe);
May we wait a little here? There is patchset by Bhanuprakash
with drm_close_driver() which may help here and with open above.
Regards,
Kamil
> + }
> +}
> +
> --
> 2.25.1
>
More information about the igt-dev
mailing list