On Saturday, February 7, 2009 6:54 am Michel Dänzer wrote:
> On Fri, 2009-02-06 at 13:04 -0800, Jesse Barnes wrote:
> > In dc1336ff4fe08ae7cfe8301bfd7f0b2cfd31d20a (set vblank enable flag
> > correctly across IRQ uninstall), we made sure drivers that uninstall
> > their interrupt handler set the vblank enabled flag correctly, so that
> > when interrupts are re-enabled, vblank interrupts & counts work as
> > expected.  However I missed the last_vblank field:  it needs to be
> > updated as well, otherwise, at the next drm_update_vblank_count we'll end
> > up comparing a current count to a stale one (the last one captured by the
> > disable function), which may trigger the wraparound handling, leading to
> > a jumpy counter and hangs in drm_wait_vblank.
> >
> > The jumpy counter can prevent the DRM_WAIT_ON from returning success if
> > the difference between the current count and the requested count is
> > greater than 2^23, leading to timeouts or hangs, if the ioctl is
> > restarted in a loop (as is the case in libdrm < 2.4.4).
> >
> > Signed-off-by: Jesse Barnes <jbar...@virtuousgeek.org>
> >
> > diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c
> > index 69aa0ab..3795dbc 100644
> > --- a/drivers/gpu/drm/drm_irq.c
> > +++ b/drivers/gpu/drm/drm_irq.c
> > @@ -276,6 +276,7 @@ int drm_irq_uninstall(struct drm_device * dev)
> >     for (i = 0; i < dev->num_crtcs; i++) {
> >             DRM_WAKEUP(&dev->vbl_queue[i]);
> >             dev->vblank_enabled[i] = 0;
> > +           dev->last_vblank[i] = dev->driver->get_vblank_counter(dev, i);
> >     }
> >     spin_unlock_irqrestore(&dev->vbl_lock, irqflags);
>
> It probably comes as no surprise to you that I like this much better
> than the workarounds proposed previously. :)

I guess we can take that as an ack then :)

I really wish we didn't uninstall our IRQ handler in the xf86-video-intel 
driver; hope you don't make the same mistake on radeon.

-- 
Jesse Barnes, Intel Open Source Technology Center

------------------------------------------------------------------------------
Create and Deploy Rich Internet Apps outside the browser with Adobe(R)AIR(TM)
software. With Adobe AIR, Ajax developers can use existing skills and code to
build responsive, highly engaging applications that combine the power of local
resources and data with the reach of the web. Download the Adobe AIR SDK and
Ajax docs to start building applications today-http://p.sf.net/sfu/adobe-com
--
_______________________________________________
Dri-devel mailing list
Dri-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/dri-devel

Reply via email to