Skip to content

Commit c1d2061

Browse files
committed
drm/i915: Squelch any ktime/jiffie rounding errors for wait-ioctl
We wait upon jiffies, but report the time elapsed using a high-resolution timer. This discrepancy can lead to us timing out the wait prior to us reporting the elapsed time as complete. This restores the squelching lost in commit e95433c ("drm/i915: Rearrange i915_wait_request() accounting with callers"). Fixes: e95433c ("drm/i915: Rearrange i915_wait_request() accounting with callers") Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Matthew Auld <matthew.william.auld@gmail.com> Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> Cc: <drm-intel-fixes@lists.freedesktop.org> # v4.10-rc1+ Cc: stable@vger.kernel.org Link: http://patchwork.freedesktop.org/patch/msgid/20170216125441.30923-1-chris@chris-wilson.co.uk Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
1 parent bbdf0b2 commit c1d2061

File tree

1 file changed

+10
-0
lines changed

1 file changed

+10
-0
lines changed

drivers/gpu/drm/i915/i915_gem.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3072,6 +3072,16 @@ i915_gem_wait_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
30723072
args->timeout_ns -= ktime_to_ns(ktime_sub(ktime_get(), start));
30733073
if (args->timeout_ns < 0)
30743074
args->timeout_ns = 0;
3075+
3076+
/*
3077+
* Apparently ktime isn't accurate enough and occasionally has a
3078+
* bit of mismatch in the jiffies<->nsecs<->ktime loop. So patch
3079+
* things up to make the test happy. We allow up to 1 jiffy.
3080+
*
3081+
* This is a regression from the timespec->ktime conversion.
3082+
*/
3083+
if (ret == -ETIME && !nsecs_to_jiffies(args->timeout_ns))
3084+
args->timeout_ns = 0;
30753085
}
30763086

30773087
i915_gem_object_put(obj);

0 commit comments

Comments
 (0)