[Intel-gfx] [PATCH 1/3] drm/i915: Provide a timeout to i915_gem_wait_for_idle()
Chris Wilson
chris at chris-wilson.co.uk
Mon Jul 9 13:06:48 UTC 2018
Quoting Mika Kuoppala (2018-07-09 12:52:51)
> Chris Wilson <chris at chris-wilson.co.uk> writes:
>
> > Quoting Mika Kuoppala (2018-07-09 12:38:10)
> >> Chris Wilson <chris at chris-wilson.co.uk> writes:
> >> > -int i915_gem_wait_for_idle(struct drm_i915_private *i915, unsigned int flags)
> >> > +int i915_gem_wait_for_idle(struct drm_i915_private *i915,
> >> > + unsigned int flags, long timeout)
> >> > {
> >> > GEM_TRACE("flags=%x (%s)\n",
> >> > flags, flags & I915_WAIT_LOCKED ? "locked" : "unlocked");
> >>
> >> Did you omit enhancing the trace on purpose?
> >
> > Didn't even consider it. I personally only use it as a breadcrumb in the
> > trace.
> >
> >> Eventually i915_request_wait will assert for silly timeout values, but
> >> should we add assertion here too as wait_for_timeline will
> >> return what we put, for nonactive timelines?
> >>
> >> > @@ -3798,9 +3801,9 @@ int i915_gem_wait_for_idle(struct drm_i915_private *i915, unsigned int flags)
> >> > lockdep_assert_held(&i915->drm.struct_mutex);
> >> >
> >> > list_for_each_entry(tl, &i915->gt.timelines, link) {
> >> > - err = wait_for_timeline(tl, flags);
> >> > - if (err)
> >> > - return err;
> >> > + timeout = wait_for_timeline(tl, flags, timeout);
> >> > + if (timeout < 0)
> >> > + return timeout;
> >> > }
> >> >
> >> > err = wait_for_engines(i915);
> >>
> >> To truely serve the caller, the remaining timeout could be passed to
> >> wait_for_engines too, but that can be followup.
> >
> > I don't think so. The timeout we employ there is specific to the CSB
> > delay and we need to employ that irrespective of the caller timeout.
> > At this point, we have successfully waited for all requests, and now
> > just have to drain any HW queues -- imo, we have completed the task the
> > caller set out for us (requests completed within the timeout). And now
> > onto the followup retirement optimisations.
>
> Agreed, my mistake. At that point all the requests are already done.
> If the engine hw flush timeouts, that is catastrophic, regardless
> of caller preferences.
>
> Reviewed-by: Mika Kuoppala <mika.kuoppala at linux.intel.com>
Added the timeout info to the GEM_TRACE and pushed. Thanks for the review,
-Chris
More information about the Intel-gfx
mailing list