On Fri, Mar 24, 2017 at 06:30:03PM -0700, Michel Thierry wrote: > Check that we can reset specific engines, also check the fallback to > full reset if something didn't work. > > Signed-off-by: Michel Thierry <michel.thierry@xxxxxxxxx> > --- > drivers/gpu/drm/i915/selftests/intel_hangcheck.c | 144 +++++++++++++++++++++++ > 1 file changed, 144 insertions(+) > > diff --git a/drivers/gpu/drm/i915/selftests/intel_hangcheck.c b/drivers/gpu/drm/i915/selftests/intel_hangcheck.c > index 76d5f78c1724..91b78e638494 100644 > --- a/drivers/gpu/drm/i915/selftests/intel_hangcheck.c > +++ b/drivers/gpu/drm/i915/selftests/intel_hangcheck.c > @@ -323,6 +323,56 @@ static int igt_global_reset(void *arg) > return err; > } > > +static int igt_reset_engine(void *arg) > +{ > + struct drm_i915_private *i915 = arg; > + struct intel_engine_cs *engine; > + enum intel_engine_id id; > + unsigned int reset_count, reset_engine_count; > + int err = 0; > + > + /* Check that we can issue a global GPU and engine reset */ > + > + if (!intel_has_gpu_reset(i915)) > + return 0; > + > + if (!intel_has_reset_engine(i915)) > + return 0; Where do you do the global reset in this function? So isn't the has-engine-reset sufficient? And the caller does the global check for you. > + set_bit(I915_RESET_BACKOFF, &i915->gpu_error.flags); > + mutex_lock(&i915->drm.struct_mutex); This will all change! ;) > +static int igt_render_engine_reset_fallback(void *arg) > +{ > + struct drm_i915_private *i915 = arg; > + struct intel_engine_cs *engine = i915->engine[RCS]; > + struct hang h; > + struct drm_i915_gem_request *rq; > + unsigned int reset_count, reset_engine_count; > + int err = 0; > + > + /* Check that we can issue a global GPU and engine reset */ > + > + if (!intel_has_gpu_reset(i915)) > + return 0; > + > + if (!intel_has_reset_engine(i915)) > + return 0; > + > + set_bit(I915_RESET_BACKOFF, &i915->gpu_error.flags); > + mutex_lock(&i915->drm.struct_mutex); > + > + err = hang_init(&h, i915); > + if (err) > + goto unlock; > + > + rq = hang_create_request(&h, engine, i915->kernel_context); > + if (IS_ERR(rq)) { > + err = PTR_ERR(rq); > + goto fini; > + } > + > + i915_gem_request_get(rq); > + __i915_add_request(rq, true); ... > +fini: i915_gem_request_put(rq); > + hang_fini(&h); > +unlock: > + mutex_unlock(&i915->drm.struct_mutex); > + clear_bit(I915_RESET_BACKOFF, &i915->gpu_error.flags); > + > + if (i915_terminally_wedged(&i915->gpu_error)) > + return -EIO; > + > + return err; > +} -- Chris Wilson, Intel Open Source Technology Centre _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx