public inbox for intel-gfx@lists.freedesktop.org
 help / color / mirror / Atom feed
* [PATCH] drm/i915: Handle full s64 precision for wait-ioctl
@ 2017-08-05 19:19 Chris Wilson
  2017-08-05 19:47 ` Chris Wilson
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Chris Wilson @ 2017-08-05 19:19 UTC (permalink / raw)
  To: intel-gfx; +Cc: Daniel Vetter

The wait-ioctl is optionally supplied a timeout with nanosecond
precision in a s64 field. We use nsecs_to_jiffies64() to convert that
into the jiffies consumed by the scheduler, but internally
nsecs_to_jiffies64() does not guard against overflow (as it's purpose is
for use by the scheduler and not drivers!). So we must guard against the
overflow ourselves, and in the process note that we may then return
much earlier than the timeout selected by the user, so don't report
ETIME unless we do hit the timeout. (Woe betold us though if the user
waits for a year (32bit) and the request is still not complete!)

Reported-by: Jason Ekstrand <jason.ekstrand@intel.com>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
---
 drivers/gpu/drm/i915/i915_drv.h | 6 ++++++
 drivers/gpu/drm/i915/i915_gem.c | 4 ++++
 2 files changed, 10 insertions(+)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 2638967211a9..184f4d11de79 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -4144,6 +4144,12 @@ static inline unsigned long msecs_to_jiffies_timeout(const unsigned int m)
 
 static inline unsigned long nsecs_to_jiffies_timeout(const u64 n)
 {
+#if NSEC_PER_SEC % HZ
+	/* nsecs_to_jiffies64() does not guard against overflow */
+	if (n >= (u64)MAX_JIFFY_OFFSET * NSEC_PER_SEC / HZ)
+		return MAX_JIFFY_OFFSET;
+#endif
+
         return min_t(u64, MAX_JIFFY_OFFSET, nsecs_to_jiffies64(n) + 1);
 }
 
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 44df7dc3f880..b5794add4a3a 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -3543,6 +3543,10 @@ i915_gem_wait_ioctl(struct file *filp,
 		 */
 		if (ret == -ETIME && !nsecs_to_jiffies(arg.timeout_ns))
 			arg.timeout_ns = 0;
+
+		/* Asked to wait beyond the jiffie/scheduler precision */
+		if (ret == -ETIME && arg.timeout_ns)
+			ret = -EAGAIN;
 	}
 
 	i915_gem_object_put(obj);
-- 
2.13.3

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2017-08-15 16:42 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-08-05 19:19 [PATCH] drm/i915: Handle full s64 precision for wait-ioctl Chris Wilson
2017-08-05 19:47 ` Chris Wilson
2017-08-11  7:18   ` Joonas Lahtinen
2017-08-11  7:13 ` Joonas Lahtinen
2017-08-11 10:57 ` [PATCH v2] " Chris Wilson
2017-08-14 10:42   ` Joonas Lahtinen
2017-08-15 16:41     ` Chris Wilson
2017-08-11 11:27 ` ✓ Fi.CI.BAT: success for drm/i915: Handle full s64 precision for wait-ioctl (rev2) Patchwork

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox