xf86-video-intel: src/i830_exa.c

Zhenyu Wang zhen at kemper.freedesktop.org
Tue Dec 30 23:03:45 PST 2008


 src/i830_exa.c |   19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)

New commits:
commit 1f61e97904dfe5f8c08bb9f284cfdfe878f7e541
Author: Zhenyu Wang <zhenyu.z.wang at intel.com>
Date:   Wed Dec 31 22:56:57 2008 +0800

    UXA: Fallback to dri_bo_map() if pin failed
    
    This fixes VT switch issue with UXA after Eric's
    aae4008096399a0e84abc7c016b35092caf9db25 on 2D side.

diff --git a/src/i830_exa.c b/src/i830_exa.c
index 636aa0a..aeffedd 100644
--- a/src/i830_exa.c
+++ b/src/i830_exa.c
@@ -785,11 +785,15 @@ i830_uxa_prepare_access (PixmapPtr pixmap, uxa_access_t access)
 	    i830->need_sync = FALSE;
 	}
 
-	if (drm_intel_bo_pin(bo, 4096) != 0)
-	    return FALSE;
-
-	drm_intel_gem_bo_start_gtt_access(bo, access == UXA_ACCESS_RW);
-	pixmap->devPrivate.ptr = pI830->FbBase + bo->offset;
+	if (drm_intel_bo_pin(bo, 4096) != 0) {
+	    /* happen in vt switched */
+	    if (dri_bo_map(bo, access == UXA_ACCESS_RW) != 0)
+		return FALSE;
+	    pixmap->devPrivate.ptr = bo->virtual;
+	} else {
+	    drm_intel_gem_bo_start_gtt_access(bo, access == UXA_ACCESS_RW);
+	    pixmap->devPrivate.ptr = pI830->FbBase + bo->offset;
+	}
     }
     return TRUE;
 }
@@ -804,7 +808,10 @@ i830_uxa_finish_access (PixmapPtr pixmap)
 	ScrnInfoPtr scrn = xf86Screens[screen->myNum];
 	I830Ptr i830 = I830PTR(scrn);
 
-	drm_intel_bo_unpin(bo);
+	if (bo->virtual)
+	    dri_bo_unmap(bo);
+	else
+	    drm_intel_bo_unpin(bo);
 
 	pixmap->devPrivate.ptr = NULL;
 	if (bo == i830->front_buffer->bo)


More information about the xorg-commit mailing list