[Intel-gfx] [PATCH 07/15] drm/i915: Check the timeout passed to i915_wait_request

Tvrtko Ursulin tvrtko.ursulin at linux.intel.com
Mon Nov 30 02:14:04 PST 2015


On 29/11/15 08:48, Chris Wilson wrote:
> We have relied upon the sole caller (wait_ioctl) validating the timeout
> argument. However, when waiting for multiple requests I forgot to ensure
> that the timeout was still positive on the later requests. This is more
> simply done inside __i915_wait_request.

As discussed on IRC please mention that the extra jiffie happens because 
nsecs_to_jiffies_timeout adds it. Otherwise it is not immediately clear 
why would it wait an extra one since __i915_wait_request has explicit 
code to ensure timeout does not go negative already.

With that clarified,

Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>

Regards,

Tvrtko

> Fixes a minor regression introduced in
>
> commit b47161858ba13c9c7e03333132230d66e008dd55
> Author: Chris Wilson <chris at chris-wilson.co.uk>
> Date:   Mon Apr 27 13:41:17 2015 +0100
>
>      drm/i915: Implement inter-engine read-read optimisations
>
> where we may end up waiting for an extra jiffie for each active ring
> after consuming all of the user's timeout.
>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: Lionel Landwerlin <lionel.g.landwerlin at linux.intel.com>
> Cc: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
> Cc: Daniel Vetter <daniel.vetter at ffwll.ch>
> ---
>   drivers/gpu/drm/i915/i915_gem.c | 12 ++++++++++--
>   1 file changed, 10 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
> index f33c35c6130f..65d101b47d8e 100644
> --- a/drivers/gpu/drm/i915/i915_gem.c
> +++ b/drivers/gpu/drm/i915/i915_gem.c
> @@ -1251,8 +1251,16 @@ int __i915_wait_request(struct drm_i915_gem_request *req,
>   	if (i915_gem_request_completed(req, true))
>   		return 0;
>
> -	timeout_expire = timeout ?
> -		jiffies + nsecs_to_jiffies_timeout((u64)*timeout) : 0;
> +	timeout_expire = 0;
> +	if (timeout) {
> +		if (WARN_ON(*timeout < 0))
> +			return -EINVAL;
> +
> +		if (*timeout == 0)
> +			return -ETIME;
> +
> +		timeout_expire = jiffies + nsecs_to_jiffies_timeout(*timeout);
> +	}
>
>   	if (INTEL_INFO(dev_priv)->gen >= 6)
>   		gen6_rps_boost(dev_priv, rps, req->emitted_jiffies);
>


More information about the Intel-gfx mailing list