[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