i810 driver vblank bug

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


Thanks
Austin
_______________________________________________
xorg mailing list
xorg@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/xorg

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [X Forum]     [Intel Graphics]     [AMD Graphics]     [Nouveau Driver]     [XFree86]     [XFree86 Newbie]     [IETF Annouce]     [Security]     [Fontconfig]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Video for Linux]     [Linux RAID]

  Powered by Linux