[Intel-gfx] [PATCH] drm/i915: Replace open-coded wait-for loop

Mika Kuoppala mika.kuoppala at linux.intel.com
Tue Jan 23 10:09:30 UTC 2018


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

> Now that we can pass arbitrary commands into the base __wait_for()
> macro, we can reimplement the open-coded wait-for inside
> i915_gem_idle_work_handler() using the macro. This means that instead of
> using ktime, we now use jiffies, and benefit from the exponential sleep
> backoff that allows a fast response if the HW settles quickly.
>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: Mika Kuoppala <mika.kuoppala at intel.com>
> Cc: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
> Cc: Joonas Lahtinen <joonas.lahtinen at linux.intel.com>
>
> ---
> Note this depends on __wait_for() from the hdcp topic branch.
> ---
>  drivers/gpu/drm/i915/i915_gem.c | 15 ++++-----------
>  1 file changed, 4 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
> index 7f0684ccc724..cb4df1be0909 100644
> --- a/drivers/gpu/drm/i915/i915_gem.c
> +++ b/drivers/gpu/drm/i915/i915_gem.c
> @@ -3347,7 +3347,6 @@ i915_gem_idle_work_handler(struct work_struct *work)
>  	struct drm_i915_private *dev_priv =
>  		container_of(work, typeof(*dev_priv), gt.idle_work.work);
>  	bool rearm_hangcheck;
> -	ktime_t end;
>  
>  	if (!READ_ONCE(dev_priv->gt.awake))
>  		return;
> @@ -3356,16 +3355,10 @@ i915_gem_idle_work_handler(struct work_struct *work)
>  	 * Wait for last execlists context complete, but bail out in case a
>  	 * new request is submitted.
>  	 */
> -	end = ktime_add_ms(ktime_get(), I915_IDLE_ENGINES_TIMEOUT);
> -	do {
> -		if (new_requests_since_last_retire(dev_priv))
> -			return;
> -
> -		if (intel_engines_are_idle(dev_priv))
> -			break;
> -
> -		usleep_range(100, 500);
> -	} while (ktime_before(ktime_get(), end));
> +	__wait_for(if (new_requests_since_last_retire(dev_priv)) return,
> +		   intel_engines_are_idle(dev_priv),
> +		   I915_IDLE_ENGINES_TIMEOUT * 1000,
> +		   10,  1000);

Not perhaps the prettiest construct but it does what
the commit message promises.

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


More information about the Intel-gfx mailing list