On Wed, Jun 12, 2013 at 11:58:44AM +0200, Michel Dänzer wrote: > From: Michel Dänzer <michel.daenzer@xxxxxxx> > > It takes an unsigned value. This happens not to blow up on 64-bit > architectures, but it does on 32-bit, causing > drm_calc_vbltimestamp_from_scanoutpos() to calculate totally bogus > timestamps for vblank events. Which in turn causes e.g. gnome-shell to > hang after a DPMS off cycle with current xf86-video-ati Git. > > Cc: stable@xxxxxxxxxxxxxxx > Signed-off-by: Michel Dänzer <michel.daenzer@xxxxxxx> Our paranoid flip tester apparently hit this: Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=59339 Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=59836 Tested-by: shui yangwei <yangweix.shui@xxxxxxxxx> Cheers, Daniel > --- > drivers/gpu/drm/drm_irq.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c > index a6a8643..39665f8 100644 > --- a/drivers/gpu/drm/drm_irq.c > +++ b/drivers/gpu/drm/drm_irq.c > @@ -708,7 +708,10 @@ int drm_calc_vbltimestamp_from_scanoutpos(struct drm_device *dev, int crtc, > /* Subtract time delta from raw timestamp to get final > * vblank_time timestamp for end of vblank. > */ > - etime = ktime_sub_ns(etime, delta_ns); > + if (delta_ns < 0) > + etime = ktime_add_ns(etime, -delta_ns); > + else > + etime = ktime_sub_ns(etime, delta_ns); > *vblank_time = ktime_to_timeval(etime); > > DRM_DEBUG("crtc %d : v %d p(%d,%d)@ %ld.%ld -> %ld.%ld [e %d us, %d rep]\n", > -- > 1.8.3 > > _______________________________________________ > dri-devel mailing list > dri-devel@xxxxxxxxxxxxxxxxxxxxx > http://lists.freedesktop.org/mailman/listinfo/dri-devel -- Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel