i810 driver vblank bug

Alan Hourihane alanh at fairlite.demon.co.uk
Mon Aug 28 03:56:36 PDT 2006


On Mon, 2006-08-28 at 18:35 +0800, Yuan Austin wrote:
> Hi,
> 
> i915 drm version 1.5 adds two ioctls to enable/disable vblank
> interrupt of pipe A&B, and it is disabled by default. There are
> several lines of initialization code in i810 2D driver to enable
> vblank interrupt to make sure DRI applications can get vblank
> interrupt on time. The issue is that 2D driver will bypass the
> initialization code due to one conditional expression in
> i830_driver.c:I830BIOSEnterVT:
> 
> #ifdef XF86DRI
>    if (pI830->directRenderingEnabled) {
>       if (!pI830->starting) {
>          ScreenPtr pScreen = pScrn->pScreen;
>          drmI830Sarea *sarea = (drmI830Sarea *) DRIGetSAREAPrivate(pScreen);
>          int i;
> 
>          I830DRIResume(screenInfo.screens[scrnIndex]);
>          I830DRISetVBlankInterrupt (pScrn, TRUE);
> ........
> #endif
> 
> Because pI830->starting is true when I830BIOSEnterVT is called by
> I830BIOSScreenInit, the I830DRISetVBlankInterrupt will be skipped,
> then vblank will be disabled until one VT switch occurs. The disabled
> vblank interrupt will cause DRI applications vblank waiting timeout
> before copying back buffer to frontbuffer, and an error message will
> pop up(Mesa i915 driver:
> intelCopyBuffer->driWaitForVBlank->do_wait->drmWaitVBlank):
> do_wait: drmWaitVBlank returned -1, IRQs don't seem to be working correctly.
> Try running with LIBGL_THROTTLE_REFRESH and LIBL_SYNC_REFRESH unset.
> 
> A small patch can fix this issue:
> 
> --- ./i830_driver.old.c 2006-08-27 15:46:53.000000000 -0400
> +++ ./i830_driver.c     2006-08-27 21:12:09.000000000 -0400
> @@ -8097,7 +8097,9 @@
> 
>          DPRINTF(PFX, "calling dri unlock\n");
>          DRIUnlock(screenInfo.screens[pScrn->scrnIndex]);
> -      }
> +      } else
> +         I830DRISetVBlankInterrupt (pScrn, TRUE);
> +
>        pI830->LockHeld = 0;
>     }
> #endif

I've fixed this in the git repo now, but the "else" shouldn't be there.

Alan.




More information about the xorg mailing list