[patch] xf86-video-intel: fix driver hang when vt switching with rotation - 2nd

Hong Liu hong.liu at intel.com
Tue Mar 11 18:49:16 PDT 2008


Unbind and bind a DRM BO may change the buffer offset, thus
crtc may reference a wrong rotated memory after a VT switch cycle.
Destroying it here will cause its reallocation when entering VT.

Thanks,
Hong

diff --git a/src/i830_driver.c b/src/i830_driver.c
index 4c28267..0ce3883 100644
--- a/src/i830_driver.c
+++ b/src/i830_driver.c
@@ -3088,6 +3088,8 @@ I830LeaveVT(int scrnIndex, int flags)
 {
    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
    I830Ptr pI830 = I830PTR(pScrn);
+   xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(pScrn);
+   int o;
 
    DPRINTF(PFX, "Leave VT\n");
 
@@ -3115,6 +3117,17 @@ I830LeaveVT(int scrnIndex, int flags)
    }
 #endif
 
+   for (o = 0; o < config->num_crtc; o++) {
+       xf86CrtcPtr crtc = config->crtc[o];
+
+       if (crtc->rotatedPixmap || crtc->rotatedData) {
+	   crtc->funcs->shadow_destroy(crtc, crtc->rotatedPixmap,
+		   			crtc->rotatedData);
+	   crtc->rotatedPixmap = NULL;
+	   crtc->rotatedData = NULL;
+       }
+   }
+
    xf86_hide_cursors (pScrn);
 
    RestoreHWState(pScrn);





More information about the xorg mailing list