On Tue, Apr 09, 2013 at 10:13:23AM +0100, Chris Wilson wrote: > As we recompute the remaining timeout after waiting, there is a > potential for that timeout to be less than zero and so need sanitizing. > The timeout is always returned to userspace and validated, so we should > always perform the sanitation. > > Cc: Ville Syrj?l? <ville.syrjala at linux.intel.com> > Cc: Ben Widawsky <ben at bwidawsk.net> > Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk> > --- > drivers/gpu/drm/i915/i915_gem.c | 3 +-- > 1 file changed, 1 insertion(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c > index 63c05dd..fcf8492 100644 > --- a/drivers/gpu/drm/i915/i915_gem.c > +++ b/drivers/gpu/drm/i915/i915_gem.c > @@ -1045,6 +1045,7 @@ static int __wait_seqno(struct intel_ring_buffer *ring, u32 seqno, > if (timeout) { > struct timespec sleep_time = timespec_sub(now, before); > *timeout = timespec_sub(*timeout, sleep_time); > + set_normalized_timespec(timeout, 0, 0); This will just set timeout = {0,0}, no? And timespec_sub() should already return a normalized timespec, so I guess the warning would just trigger when sleep_time > timeout. So we should maybe just check for that case, and only then set timeout={0,0}? > } > > switch (end) { > @@ -1053,8 +1054,6 @@ static int __wait_seqno(struct intel_ring_buffer *ring, u32 seqno, > case -ERESTARTSYS: /* Signal */ > return (int)end; > case 0: /* Timeout */ > - if (timeout) > - set_normalized_timespec(timeout, 0, 0); > return -ETIME; > default: /* Completed */ > WARN_ON(end < 0); /* We're not aware of other errors */ > -- > 1.7.10.4 -- Ville Syrj?l? Intel OTC