Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> 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@xxxxxxxxxxxxxxxxxx> > Cc: Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx> > --- > 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@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/intel-gfx _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx