Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 762e4583 authored by Chris Wilson's avatar Chris Wilson Committed by Jani Nikula
Browse files

drm/i915: Make WAIT_IOCTL negative timeouts be indefinite again

This fixes a regression from

commit 5ed0bdf2
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.

Testcase: igt/gem_wait
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=89494


Signed-off-by: default avatarChris 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
Reviewed-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
[Jani: fixed a checkpatch complaint about whitespace.]
Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
parent 6c51d46f
Loading
Loading
Loading
Loading
+4 −3
Original line number Original line Diff line number Diff line
@@ -2936,9 +2936,9 @@ i915_gem_wait_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
	req = obj->last_read_req;
	req = obj->last_read_req;


	/* Do this after OLR check to make sure we make forward progress polling
	/* 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;
		ret = -ETIME;
		goto out;
		goto out;
	}
	}
@@ -2948,7 +2948,8 @@ i915_gem_wait_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
	i915_gem_request_reference(req);
	i915_gem_request_reference(req);
	mutex_unlock(&dev->struct_mutex);
	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);
				  file->driver_priv);
	mutex_lock(&dev->struct_mutex);
	mutex_lock(&dev->struct_mutex);
	i915_gem_request_unreference(req);
	i915_gem_request_unreference(req);