[Intel-gfx] [PATCH 07/33] drm/i915/selftests: Apply a subtest filter
Mika Kuoppala
mika.kuoppala at linux.intel.com
Fri Jan 25 11:44:30 UTC 2019
Chris Wilson <chris at chris-wilson.co.uk> writes:
> In bringup on simulated HW even rudimentary tests are slow, and so many
> may fail that we want to be able to filter out the noise to focus on the
> specific problem. Even just the tests groups provided for igt is not
> specific enough, and we would like to isolate one particular subtest
> (and probably subsubtests!). For simplicity, allow the user to provide a
> command line parameter such as
>
> i915.st_filter=i915_timeline_mock_selftests/igt_sync
>
> to restrict ourselves to only running on subtest. The exact name to use
> is given during a normal run, highlighted as an error if it failed,
> debug otherwise. The test group is optional, and then all subtests are
> compared for an exact match with the filter (most subtests have unique
> names). The filter can be negated, e.g. i915.st_filter=!igt_sync and
> then all tests but those that match will be run. More than one match can
> be supplied separated by a comma, e.g.
>
> i915.st_filter=igt_vma_create,igt_vma_pin1
>
> to only run those specified, or
>
> i915.st_filter=!igt_vma_create,!igt_vma_pin1
>
> to run all but those named. Mixing a blacklist and whitelist will only
> execute those subtests matching the whitelist so long as they are
> previously excluded in the blacklist.
>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: Joonas Lahtinen <joonas.lahtinen at linux.intel.com>
> ---
> drivers/gpu/drm/i915/i915_selftest.h | 1 +
> .../gpu/drm/i915/selftests/i915_selftest.c | 44 +++++++++++++++++++
> 2 files changed, 45 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/i915_selftest.h b/drivers/gpu/drm/i915/i915_selftest.h
> index a73472dd12fd..207e21b478f2 100644
> --- a/drivers/gpu/drm/i915/i915_selftest.h
> +++ b/drivers/gpu/drm/i915/i915_selftest.h
> @@ -31,6 +31,7 @@ struct i915_selftest {
> unsigned long timeout_jiffies;
> unsigned int timeout_ms;
> unsigned int random_seed;
> + char *filter;
> int mock;
> int live;
> };
> diff --git a/drivers/gpu/drm/i915/selftests/i915_selftest.c b/drivers/gpu/drm/i915/selftests/i915_selftest.c
> index 86c54ea37f48..1b174ac65ff9 100644
> --- a/drivers/gpu/drm/i915/selftests/i915_selftest.c
> +++ b/drivers/gpu/drm/i915/selftests/i915_selftest.c
> @@ -197,6 +197,46 @@ int i915_live_selftests(struct pci_dev *pdev)
> return 0;
> }
>
> +static bool apply_subtest_filter(const char *caller, const char *name)
> +{
> + char *filter, *sep, *tok;
> + bool result = true;
> +
> + filter = kstrdup(i915_selftest.filter, GFP_KERNEL);
Was going to say that bailout if !filter.
But apparently it is ok this way.
-Mika
> + for (sep = filter; (tok = strsep(&sep, ","));) {
> + bool allow = true;
> + char *sl;
> +
> + if (*tok == '!') {
> + allow = false;
> + tok++;
> + }
> +
> + sl = strchr(tok, '/');
> + if (sl) {
> + *sl++ = '\0';
> + if (strcmp(tok, caller)) {
> + if (allow)
> + result = false;
> + continue;
> + }
> + tok = sl;
> + }
> +
> + if (strcmp(tok, name)) {
> + if (allow)
> + result = false;
> + continue;
> + }
> +
> + result = allow;
> + break;
> + }
> + kfree(filter);
> +
> + return result;
> +}
> +
> int __i915_subtests(const char *caller,
> const struct i915_subtest *st,
> unsigned int count,
> @@ -209,6 +249,9 @@ int __i915_subtests(const char *caller,
> if (signal_pending(current))
> return -EINTR;
>
> + if (!apply_subtest_filter(caller, st->name))
> + continue;
> +
> pr_debug(DRIVER_NAME ": Running %s/%s\n", caller, st->name);
> GEM_TRACE("Running %s/%s\n", caller, st->name);
>
> @@ -244,6 +287,7 @@ bool __igt_timeout(unsigned long timeout, const char *fmt, ...)
>
> module_param_named(st_random_seed, i915_selftest.random_seed, uint, 0400);
> module_param_named(st_timeout, i915_selftest.timeout_ms, uint, 0400);
> +module_param_named(st_filter, i915_selftest.filter, charp, 0400);
>
> module_param_named_unsafe(mock_selftests, i915_selftest.mock, int, 0400);
> MODULE_PARM_DESC(mock_selftests, "Run selftests before loading, using mock hardware (0:disabled [default], 1:run tests then load driver, -1:run tests then exit module)");
> --
> 2.20.1
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
More information about the Intel-gfx
mailing list