Re: [PATCH] drm/i915: Make WAIT_IOCTL negative timeouts be indefinite again

Daniel Vetter
2015-03-05T12:27:43Z

On Wed, Mar 04, 2015 at 06:09:26PM +0000, Chris Wilson wrote:
> This fixes a regression from
>
> commit 5ed0bdf21a85d78e04f89f15ccf227562177cbd9
> Author: Thomas Gleixner <tglx@linutronix.de>
> Date: Wed Jul 16 21:05:06 2014 +0000
>
> drm: i915: Use nsec based interfaces
>
> that made a negative timeout return immediately rather than the
> previously defined behaviour of waiting indefinitely.
>
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
> Cc: Ben Widawsky <benjamin.widawsky@intel.com>
> Cc: Kristian Høgsberg <krh@bitplanet.net>
> Cc: stable@vger.kernel.org

Do you have the igt for this too? I think an wait while the buffer should
be busy with a negative timeout is all that's needed to exercise this.
-Daniel

> ---
> drivers/gpu/drm/i915/i915_gem.c | 7 ++++---
> 1 file changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
> index 0cb858269be9..9d0df4d85693 100644
> --- a/drivers/gpu/drm/i915/i915_gem.c
> +++ b/drivers/gpu/drm/i915/i915_gem.c
> @@ -2957,9 +2957,9 @@ i915_gem_wait_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
> req = obj->last_read_req;
>
> /* Do this after OLR check to make sure we make forward progress polling
> - * on this IOCTL with a timeout <=0 (like busy ioctl)
> + * on this IOCTL with a timeout == 0 (like busy ioctl)
> */
> - if (args->timeout_ns <= 0) {
> + if (args->timeout_ns == 0) {
> ret = -ETIME;
> goto out;
> }
> @@ -2969,7 +2969,8 @@ i915_gem_wait_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
> i915_gem_request_reference(req);
> mutex_unlock(&dev->struct_mutex);
>
> - ret = __i915_wait_request(req, reset_counter, true, &args->timeout_ns,
> + ret = __i915_wait_request(req, reset_counter, true,
> + args->timeout_ns>0 ? &args->timeout_ns : NULL,
> file->driver_priv);
> mutex_lock(&dev->struct_mutex);
> i915_gem_request_unreference(req);
> --
> 2.1.4
>

--
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch