On Wed, 2013-06-12 at 11:58 +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> Yes, I introduced this regression in: drm: use monotonic time in drm_calc_vbltimestamp_from_scanoutpos The fix seems to be ok, perhaps you should also mention the regressing commit in the commit message. Reviewed-by: Imre Deak <imre.deak@xxxxxxxxx> > --- > 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", _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel