[Intel-gfx] [PATCH 3/6] drm/i915/selftests: Fixup atomic reset checking

Mika Kuoppala mika.kuoppala at linux.intel.com
Wed Jun 26 13:43:00 UTC 2019


Chris Wilson <chris at chris-wilson.co.uk> writes:

> Quoting Mika Kuoppala (2019-06-26 14:35:01)
>> Chris Wilson <chris at chris-wilson.co.uk> writes:
>> 
>> > We require that the intel_gpu_reset() was atomic, not the whole of
>> > i915_reset() which is guarded by a mutex. However, we do require that
>> > i915_reset_engine() is atomic for use from within the submission tasklet.
>> >
>> > Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
>> > ---
>> >  drivers/gpu/drm/i915/gt/selftest_reset.c | 65 +++++++++++++++++++++++-
>> >  1 file changed, 63 insertions(+), 2 deletions(-)
>> >
>> > diff --git a/drivers/gpu/drm/i915/gt/selftest_reset.c b/drivers/gpu/drm/i915/gt/selftest_reset.c
>> > index 64c2c8ab64ec..641cf3aee8d5 100644
>> > --- a/drivers/gpu/drm/i915/gt/selftest_reset.c
>> > +++ b/drivers/gpu/drm/i915/gt/selftest_reset.c
>> > @@ -73,11 +73,13 @@ static int igt_atomic_reset(void *arg)
>> >       for (p = igt_atomic_phases; p->name; p++) {
>> >               GEM_TRACE("intel_gpu_reset under %s\n", p->name);
>> >  
>> > -             p->critical_section_begin();
>> >               reset_prepare(i915);
>> > +             p->critical_section_begin();
>> > +
>> >               err = intel_gpu_reset(i915, ALL_ENGINES);
>> > -             reset_finish(i915);
>> > +
>> >               p->critical_section_end();
>> > +             reset_finish(i915);
>> >  
>> >               if (err) {
>> >                       pr_err("intel_gpu_reset failed under %s\n", p->name);
>> > @@ -95,12 +97,71 @@ static int igt_atomic_reset(void *arg)
>> >       return err;
>> >  }
>> >  
>> > +static int igt_atomic_engine_reset(void *arg)
>> > +{
>> > +     struct drm_i915_private *i915 = arg;
>> > +     const typeof(*igt_atomic_phases) *p;
>> 
>> I did admire the nastyness of this array.
>> 
>> > +     struct intel_engine_cs *engine;
>> > +     enum intel_engine_id id;
>> > +     int err = 0;
>> > +
>> > +     /* Check that the resets are usable from atomic context */
>> > +
>> > +     if (!intel_has_reset_engine(i915))
>> > +             return 0;
>> > +
>> > +     if (USES_GUC_SUBMISSION(i915))
>> > +             return 0;
>> > +
>> > +     intel_gt_pm_get(&i915->gt);
>> > +     igt_global_reset_lock(i915);
>> > +
>> > +     /* Flush any requests before we get started and check basics */
>> > +     if (!igt_force_reset(i915))
>> > +             goto out_unlock;
>> 
>> I would still go out with error if the prerequisites
>> are not met?
>
> It's just so that the selftests report green except for the 1 or 2 that
> explicitly report as red if the machine is terminally wedged at boot.
>
> It's just damage control.

Reviewed-by: Mika Kuoppala <mika.kuoppala at linux.intel.com>


More information about the Intel-gfx mailing list