Quoting Tvrtko Ursulin (2018-04-23 11:44:19) > > On 23/04/2018 11:13, Chris Wilson wrote: > > diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c > > index 0097a77fae8d..1635975dbc16 100644 > > --- a/drivers/gpu/drm/i915/i915_gem.c > > +++ b/drivers/gpu/drm/i915/i915_gem.c > > @@ -3110,10 +3110,10 @@ static void engine_skip_context(struct i915_request *request) > > { > > struct intel_engine_cs *engine = request->engine; > > struct i915_gem_context *hung_ctx = request->ctx; > > - struct intel_timeline *timeline; > > + struct intel_timeline *timeline = request->timeline; > > unsigned long flags; > > > > - timeline = i915_gem_context_lookup_timeline(hung_ctx, engine); > > + GEM_BUG_ON(timeline == engine->timeline); > > Isn't this the guilty request, so would be on the engine timeline? request->timeline is always the client timeline, so we can move it back to the client on being preempted. > > diff --git a/drivers/gpu/drm/i915/i915_request.c b/drivers/gpu/drm/i915/i915_request.c > > index 534b8d684cef..35869afdb199 100644 > > --- a/drivers/gpu/drm/i915/i915_request.c > > +++ b/drivers/gpu/drm/i915/i915_request.c > > @@ -639,6 +639,7 @@ i915_request_alloc(struct intel_engine_cs *engine, struct i915_gem_context *ctx) > > if (IS_ERR(ring)) > > return ERR_CAST(ring); > > GEM_BUG_ON(!ring); > > + GEM_BUG_ON(ring->timeline == engine->timeline); > > It's debugging only but feels out of place. Put it in > intel_engine_create_ring? Not quite, I can move it down, the point is that rq->timeline != engine->timeline. Maybe a bit of s/rq->timeline/rq->user_timeline/? -Chris _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx