[Intel-gfx] [PATCH v3] drm/i915/selftests: Exercise context switching in parallel
Chris Wilson
chris at chris-wilson.co.uk
Mon Sep 30 14:18:08 UTC 2019
Quoting Chris Wilson (2019-09-30 15:15:22)
> We currently test context switching on each engine as a basic stress
> test (just verifying that nothing explodes if we execute 2 requests from
> different contexts sequentially). What we have not tested is what
> happens if we try and do so on all available engines simultaneously,
> putting our SW and the HW under the maximal stress.
>
> v2: Clone the set of engines from the first context into the secondary
> contexts.
>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: Mika Kuoppala <mika.kuoppala at linux.intel.com>
> Cc: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
> ---
> +static int live_parallel_switch(void *arg)
> +{
> + struct drm_i915_private *i915 = arg;
> + static int (* const func[])(void *arg) = {
> + __live_parallel_switch1,
> + __live_parallel_switchN,
> + NULL,
> + };
> + struct i915_gem_engines *engines;
> + struct i915_gem_engines_iter it;
> + int (* const *fn)(void *arg);
> + struct parallel_switch *data;
> + struct i915_gem_context *ctx;
> + struct intel_context *ce;
> + struct drm_file *file;
> + int n, m, count;
> + int err = 0;
> +
> + /*
> + * Check we can process switches on all engines simultaneously.
> + */
> +
> + if (!DRIVER_CAPS(i915)->has_logical_contexts)
> + return 0;
> +
> + file = mock_file(i915);
> + if (IS_ERR(file))
> + return PTR_ERR(file);
> +
> + mutex_lock(&i915->drm.struct_mutex);
> +
> + ctx = live_context(i915, file);
> + if (IS_ERR(ctx)) {
> + err = PTR_ERR(ctx);
> + goto out_locked;
This needs data = NULL to be safe.
...
> + mutex_lock(&i915->drm.struct_mutex);
> +out_locked:
> + for (n = 0; n < count; n++) {
> + for (m = 0; m < ARRAY_SIZE(data->ce); m++) {
> + if (!data[n].ce[m])
> + continue;
> +
> + intel_context_unpin(data[n].ce[m]);
> + intel_context_put(data[n].ce[m]);
> + }
> + }
> + mutex_unlock(&i915->drm.struct_mutex);
> + kfree(data);
> + mock_file_free(i915, file);
> + return err;
> +}
More information about the Intel-gfx
mailing list