[Intel-gfx] [PATCH v6 04/20] drm/i915/tdr: Modify error handler for per engine hang recovery

Chris Wilson chris at chris-wilson.co.uk
Tue Apr 18 23:13:10 UTC 2017


On Tue, Apr 18, 2017 at 03:01:02PM -0700, Michel Thierry wrote:
> 
> 
> On 18/04/17 14:40, Chris Wilson wrote:
> >>+	/* try engine reset first, and continue if fails; look mom, no mutex! */
> >>+	if (intel_has_reset_engine(dev_priv) && !(engine_mask & (engine_mask - 1))) {
> >
> >if (has_reset_engine() && is_power_of_2(engine_mask)) {
> >	engine = dev_priv->engine[ilog2(engine_mask)];
> >
> >Not worth iterating over the engine_mask?
> >
> >for_each_bit() {
> >	if (i915_reset_engine(engine) == 0)
> >		dev_prv->gpu_error.reset_engine_mask &= ~intel_engine_flag()
> >if (reset_engine_mask)
> >	DRM_WARN("per-engine reset failed, promoting to full gpu_reset\n");
> >
> 
> Time-wise, I'm not so sure about the benefits of 2 reset_engines vs
> full gpu reset. But it can be done... and thanks for the ilog2 tip.

Hmm, looping isn't quite right. You would need to pass down the
engine_mask so all engines were paused (in prepare), then reset, then
restarted atomically. Will think a bit more about that.

The immediate benefit is avoiding the struct_mutex + display futzing
more often.
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre


More information about the Intel-gfx mailing list